【问题标题】:How to convert JSON to an anonymous object if I don't know the data structure?如果我不知道数据结构,如何将 JSON 转换为匿名对象?
【发布时间】:2019-11-14 12:26:30
【问题描述】:

如果我没有模型,是否可以将 JSON 转换为匿名对象?

这是一个带有模型的示例:

var json = "{\"firstName\": \"John Doe\", \"lastName\": \"Doe\"}";
var model = new { firstName = "", lastName = "" };
var result = JsonConvert.DeserializeAnonymousType(json, model);
//result: { firstName = John Doe, lastName = Doe }

如果我不知道示例中的数据结构,该怎么做?

问题是我实际上正在使用一些库,如果我将动态对象作为参数传递,它就不起作用。 我需要使用的方法的唯一方法是传递一个匿名对象,例如:

instance.SomeMethod(new { firstName = "John", lastName = "Doe" })

【问题讨论】:

标签: c# json .net-core json.net


【解决方案1】:

您可以将dynamicDeserializeObject 一起使用:

var json = "{\"firstName\": \"John Doe\", \"lastName\": \"Doe\"}";      
var result = JsonConvert.DeserializeObject<dynamic>(json);
var firstName = result.firstName;

【讨论】:

    【解决方案2】:

    您可以使用 dynamic 类型,但如果在 Xamarin 中工作,则需要包含名为 Microsoft.CSharp 的引用。

    示例如下:

    var json = "{\"firstName\": \"John Doe\", \"lastName\": \"Doe\"}";
    
    dynamic x = JsonConvert.DeserializeObject(json);
    
    Console.WriteLine(x.firstname.ToString());
    
    //You'll need to convert to data type especially in boolean, int, float, double
    

    这里将object 转换为json

    dynamic x = new ExpandoObject();
    x.param1 = "";
    x.param2 = "";
    
    string json = JsonConvert.SerializeObject(x);
    

    【讨论】:

      【解决方案3】:

      使用动态:

      var json = "{\"firstName\": \"John Doe\", \"lastName\": \"Doe\"}";      
      dynamic result = JsonConvert.DeserializeObject(json);
      

      您还可以在访问之前检查该属性是否存在并避免使用此代码崩溃:

      var dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(result .ToString());
      if (dictionary.ContainsKey("firstName"))  
      //do something with "firstName"
      

      希望有效果

      【讨论】:

        【解决方案4】:

        尝试使用GSon,你应该导入依赖

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-02-15
          • 1970-01-01
          • 2016-12-23
          • 1970-01-01
          • 1970-01-01
          • 2021-03-17
          • 2012-03-30
          相关资源
          最近更新 更多