使用Newtonsoft.json自定义反序列化

时间:2017-12-21 13:46:35

标签: c# json deserialization

我正在尝试为我的类结构反序列化json

我有以下JSON:

{
    "Main": {
        "Employees": {
            "0": {
                "FirstName": "Test ",
                "LastName": "One"
            },
            "1": {
                "FirstName": "Test ",
                "LastName": "Two"
            }
        }
    }
}    

我想为以下类结构反序列化它:

public class Main
{
    public List<Employee> Employees { get; set; }
}

public class Employee
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

有人可以建议我如何为此/任何其他选项编写转换器来实现此目的吗?

2 个答案:

答案 0 :(得分:1)

显然理想的事情是使用不同的JSON( array ),但这可能是不可能的。

这不使用自定义反序列化选项,但是 - 它有效:

dynamic root = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
Newtonsoft.Json.Linq.JObject emps = root.Main.Employees;
var list = new List<Employee>();
foreach(var child in emps.Properties())
{
    list.Add(child.Value.ToObject<Employee>());
}

答案 1 :(得分:0)

您的JSON有点不对劲。您创建了一个员工类型,其中字段0和1恰好具有相同的子属性。我认为你真正想做的是让员工成为一个阵列。

{
"Main" : {
    "Employees": [
        {
            "FirstName": "Test ",
            "LastName": "One"
        },
        {
            "FirstName": "Test ",
            "LastName": "Two"
        }]
    }
}