2013-05-08 59 views
4

我有一些JSON,如:我如何反序列化使用JSON.NET并保留父对象

{ 
    "companyName": "Software Inc.", 
    "employees": [ 
    { 
     "employeeName": "Sally" 
    }, 
    { 
     "employeeName": "Jimmy" 
    } 
    ] 
} 

我想将它反序列化为:

public class Company 
{ 
    public string companyName { get; set; } 
    public IList<Employee> employees { get; set; } 
} 

public class Employee 
{ 
    public string employeeName { get; set; } 
    public Company employer { get; set; } 
} 

怎样才可以有JSON.NET设置“雇主”参考?我尝试使用CustomCreationConverter,但public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)方法不包含对当前父对象的任何引用。

回答

1

如果您试图将其作为反序列化的一部分,那只会令您头痛。在反序列化之后执行该任务会容易得多。这样做:

var company = //deserialized value 

foreach (var employee in company.employees) 
{ 
    employee.employer = company; 
} 

或者一行代码,如果你喜欢的语法:

company.employees.ForEach(e => e.employer = company); 
+0

我知道我可以手动设置引用,但我有一个深刻而复杂的图形,这将是在创建对象时更容易分配引用。你说这会导致头痛,因为使用JSON.NET很难完成,或者你认为这是一个坏主意? – 2013-05-08 10:50:14

+0

@mprudhom我只是认为做后序列化是一件相当容易的事情,但使用JSON.NET很难完成。节省自己的头痛:) – mattytommo 2013-05-08 10:53:20