使用newtonsoft将复杂的json转换为c#中的object

时间:2017-01-10 21:07:47

标签: c# json

我有一个问题是将json读取到对象:

{
    "root":[
        {
        "arr1":[
          {
              "name":"n1",
              "age": "a2"
          },
          {
              "name":"n2",
              "age":"a2"
          }
       ]},
       {
       "arr2":[
           {
               "name":"n11",
               "age" : "age22"
           },
           {
               "name":"n12",
               "age" :"a21"
           }
       ]}
    ]
 }

在我看来它可以这样工作:

public class Root
{
    public List<Arr> myArr{ get; set; }
}
public class Arr
{
     public Dictionary<string, List<Info>> info{ set; get; }
}
public class Info
{
     public string name{get;set;}
     public string age {get;set;}
}

Root root = JsonConvert.DeserializeObject<Root>(json);

这将返回具有3个对象的Root对象,但每个对象(Arr)将为null。显然我做错了什么,但我不知道是什么。理想情况下,最好只获得Dictionary&gt;作为最终结果

注意:上面的例子只是一个简单的例子,会有更多&#34; arrX&#34;对象,我需要它动态加载。

2 个答案:

答案 0 :(得分:2)

只需使用:

public class RootObject
{
    public List<Dictionary<string, List<Info>>> Root { get; set; }
}

public class Info
{
    public string Name { get; set; }
    public string Age { get; set; }
}

然后:

var root = JsonConvert.DeserializeObject<RootObject>(json);

答案 1 :(得分:0)

尝试以下一组课程

public class Rootobject
{
    public Root[] root { get; set; }
}

public class Root
{
    public Arr1[] arr1 { get; set; }
    public Arr2[] arr2 { get; set; }
}

public class Arr1
{
    public string name { get; set; }
    public string age { get; set; }
}

public class Arr2
{
    public string name { get; set; }
    public string age { get; set; }
}

Root root = JsonConvert.DeserializeObject<Rootobject>(json);

如果要稍微清理类,可以使用[JsonProperty(Name = "ayx)]指定Json属性名称。