2015-08-19 171 views
0

我想填充到C#对象的JSON/XML字符串。 我将我的XML转换为JSON,然后使用JSON.NET。例如:填充JSON列表到C#对象

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对象到类型

我怎么能这样做?

回答

2

下面是一个对象的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); 
2

你需要一个根对象

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

现在你可以反序列化

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