如何将JSON对象[] []反序列化为List <someobject>

时间:2017-02-08 02:59:27

标签: c# json json.net

我正在使用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对象列表?

3 个答案:

答案 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]) });