【问题标题】:Deserialize Json like { List : { [ ... ], [ ... ] } }像 { List : { [ ... ], [ ... ] } } 反序列化 Json
【发布时间】:2014-01-28 16:21:50
【问题描述】:

这是我第一次使用 Json。 我已经在我的 Visual Studio 项目中安装了 Json.Net,并用于反序列化一些简单的字符串,如下所示:

{
      "A":"1",
      "B":"2",
      "C":"3"
}

使用此代码:

JToken token = JObject.Parse("{ "A":"1","B":"2","C":"3"}";
string aValue = token.SelectToken("A");
string aValue = token.SelectToken("B");
string aValue = token.SelectToken("C");

但我不知道如何处理这样的 Json:

{
     "LIST":[
          {
               "A":"value1",
               "B":"value1",
               "C":"value1"
          }
          {
               "A":"value2",
               "B":"value2",
               "C":"value2"
          }
          {
               "A":"value3",
               "B":"value3",
               "C":"value3"
          }
     ],
     "D":"value4",
     "E":"value5",
     "F":"value6"
}

如何获取类型的所有元素和其他变量,如 D、E 和 F?

谢谢

【问题讨论】:

  • 一方面,您的 JSON 无效。数组中的对象后缺少逗号。
  • 是的,你没看错,数组元素用逗号隔开。

标签: c# asp.net json json.net


【解决方案1】:

最简单的方法是创建对象并反序列化为:

public class Parent
{
    public Child[] LIST { get; set; }
    public string D { get; set; }
    public string E { get; set; }
    public string F { get; set; }
}

public class Child
{
    public string A { get; set; }
    public string B { get; set; }
    public string C { get; set; }
}

一旦你定义了你的类,反序列化你的 JSON 就像这样简单:

var p = JsonConvert.DeserializeObject<Parent>(json);

【讨论】:

  • 另外,如果你只使用JsonConvert.DeserializeObject(string),我很确定 Json.NET 只是将它分配给匿名类型
  • 我按照指示制作,但数组 Children 为空。其他变量如 d、e 和 f 都可以。
  • @Yiyi 在上面的Parent 类中,将Children 属性的名称更改为LIST,或者,在Children 属性之前添加[JsonProperty("LIST")]。那么它应该可以工作了。
【解决方案2】:

@Justin 的回答很好,而且效果很好。但是,如果您想像现在一样继续使用 LINQ-to-JSON API 样式,可以通过以下方式获取所有信息:

JToken token = JToken.Parse(jsonString);

foreach (JToken t in token["LIST"])
{
    Console.WriteLine(t["A"]);
    Console.WriteLine(t["B"]);
    Console.WriteLine(t["C"]);
}

Console.WriteLine(token["D"]);
Console.WriteLine(token["E"]);
Console.WriteLine(token["F"]);

【讨论】:

    猜你喜欢
    • 2018-10-06
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 2015-06-07
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    相关资源
    最近更新 更多