填充JSON列表到c#对象



我试图将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"
}

,这里是Object

的集合/数组/列表的表示
[
    {
      "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);

相关内容

  • 没有找到相关文章

最新更新