将Json反序列化为{List:{[...],[...]}}

时间:2014-01-28 16:21:50

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

这是我与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等其他变量?

谢谢

2 个答案:

答案 0 :(得分:5)

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

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);

答案 1 :(得分:0)

@贾斯汀的答案很好,而且效果很好。但是,如果您想继续使用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"]);