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

我遇到了这个异常:

Cannot populate JSON object onto type

我该怎么做?

这是对象的 JSON 表示:

{
  "key":"value"
}

这里是对象collection/array/list的表示

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

因此您的 JSON 字符串不代表 Person class 的数组或集合。它用 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);