2013-05-08 61 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