我正在使用Newtonsoft JSON.NET包。
我正在使用的JSON有一个嵌套属性,默认情况下反序列化为一个对象[] []。例如,你有这样的东西:
[
["George", "Washington", "555-555-1234", 47],
["Ronald", "Mcdonald", "555-222-3333", 50],
["Sterling", "Archer", "234-567-8901", 30]
]
并说我创建了一个Person类
public class Person{
public string FirstName { get; set;}
public string LastName { get; set;}
public string Phone{ get; set;}
public int Age{ get; set;}
}
如何将该对象[] []反序列化为一个漂亮,易于使用的Person对象列表?
答案 0 :(得分:0)
基于这个答案:Deserialization of Json without name fields:
您可以将JSON反序列化为List,然后像这样的映射器函数可以提供帮助:
public Person PersonMapper(string[] input)
{
return new Person {
FirstName = input[0],
LastName = input[1],
Phone = input[2],
Age = Convert.ToInt32(input[3])
};
}
当然,此函数假设索引和字段的顺序始终为0,1,2,3,并且不检查错误情况。
答案 1 :(得分:0)
由于它只是string
的普通数组而不是格式良好的JSON密钥/对,因此不确定您是否可以在没有一些修改的情况下开箱即用反序列化。这就是我要做的事情:
public class Data
{
public List<List<string>> UserInfo {get;set;}
public List<Person> ToPersonList()
{
return UserInfo.Select(info=> new Person
{
FirstName = info[0],
LastName = info[1],
Phone = info[2],
Age = Convert.ToInt32(info[3])
});
}
}
然后将Newtonsoft反序列化为Data
,然后致电Data.ToPersonList()
以获取Person
答案 2 :(得分:0)
var array = new object[3][];
array[0] = new object[4] { "George", "Washington", "555-555-1234", 47 };
array[1] = new object[4] { "Ronald", "Mcdonald", "555-222-3333", 50 };
array[2] = new object[4] { "Sterling", "Archer", "234-567-8901", 30 };
var list = new List<Person>();
foreach (var r in array)
list.Add(new Person() { FirstName = (string)r[0], LastName = (string)r[1], Phone = (string)r[2], Age = int.Parse((string)r[3]) });