【问题标题】:How do I deserialize an array of JSON objects to a C# anonymous type?如何将 JSON 对象数组反序列化为 C# 匿名类型?
【发布时间】:2017-08-21 12:24:49
【问题描述】:

反序列化单个 json 对象没有问题

string json = @"{'Name':'Mike'}";

到 C# 匿名类型:

var definition = new { Name = ""};
var result = JsonConvert.DeserializeAnonymousType(json, definition);

但是当我有一个数组时:

string jsonArray = @"[{'Name':'Mike'}, {'Name':'Ben'}, {'Name':'Razvigor'}]";

我被卡住了。

怎么做?

【问题讨论】:

  • 你可以像匿名数组一样反序列化它:var result = JsonConvert.DeserializeAnonymousType(jsonArray, new[] { new { Name = "" } });

标签: c# json json.net


【解决方案1】:

解决办法是:

string json = @"[{'Name':'Mike'}, {'Name':'Ben'}, {'Name':'Razvigor'}]";

var definition = new[] { new { Name = "" } };

var result = JsonConvert.DeserializeAnonymousType(json, definition);

当然,由于result 是一个数组,您可以像这样访问单个记录:

string firstResult = result[0].Name;

你也可以在上面调用.ToList()和类似的方法。

【讨论】:

    【解决方案2】:

    你可以通过this反序列化为动态对象。

    dynamic result = JsonConvert.DeserializeObject(jsonArray);
    

    【讨论】:

    • 或像这样 var result2 = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonArray); - 你可以像 result2[0].Name 一样访问它
    【解决方案3】:

    一种方法是在 JSON 数组字符串中放置一个标识符。

    这段代码对我有用:

    var typeExample = new { names = new[] { new { Name = "" } } };
    string jsonArray = @"{ names: [{'Name':'Mike'}, {'Name':'Ben'}, {'Name':'Razvigor'}]}";
    
    var result = JsonConvert.DeserializeAnonymousType(jsonArray, typeExample);
    

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 1970-01-01
      • 2012-08-05
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      相关资源
      最近更新 更多