繁体   English   中英

将JSON列表填充到C#对象

[英]Populate JSON List To C# Object

我正在尝试将JSON / XML字符串填充到C#对象中。 我将XML转换为JSON,然后使用JSON.NET。 例:

JSON字符串

{  
"persons":[  
  {  
     "age":30,
     "name":"david",
     "hobbies":[  
        {  
           "name":"tennis",
           "hours":5
        },
        {  
           "name":"football",
           "hours":10
        }
     ]
  },
  {  
     "name":"adam",
     "age":23,
     "hobbies":[]
  }
]
}

C#类

public class Hobbies
{
    public string name;
    public int hours;
}

class Person
{
    public string name;
    public int age;
    public List<Hobbies> hoobies = new List<Hobbies>();
}

我正在尝试将数据填充到人员列表中:

List<Person> persons = new List<Person>();
JsonConvert.PopulateObject(myJsonText, persons);

我得到这个例外:

无法将JSON对象填充到类型上

我怎样才能做到这一点?

这是对象的JSON表示形式:

{
  "key":"value"
}

这是对象的集合/数组/列表的表示

[
    {
      "key":"value"
    },
    {
      "key2":"value2"
    }
]

因此,您的JSON字符串不代表Person类的数组或集合。 它用Persons属性表示对象,该属性是Person对象的集合。

要将其解析为List<Person> ,请删除最外面的{ } ,然后尝试。

您的JSON应该看起来像这样

[
    {
        "age": 30,
        "name": "david",
        "hobbies": [
            {
                "name": "tennis",
                "hours": 5
            },
            {
                "name": "football",
                "hours": 10
            }
        ]
    },
    {
        "name": "adam",
        "age": 23,
        "hobbies": []
    }
]

然后像这样反序列化

var result = JsonConvert.DeserializeObject<List<Person>>(json);

您需要一个根对象

public class Root
{
    public List<Person> Persons {set;get;}
}

现在您可以反序列化

var yourObj = JsonConvert.DeserializeObject<Root>(json);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM