如何使用JSON.NET反序列化并保留父对象

mar*_*rux 6 c# json.net

我有一些像JSON:

{
  "companyName": "Software Inc.",
  "employees": [
    {
      "employeeName": "Sally"
    },
    {
      "employeeName": "Jimmy"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我想将其反序列化为:

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; }
}
Run Code Online (Sandbox Code Playgroud)

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

mat*_*mmo 2

如果您尝试将其作为反序列化的一部分,那么这只会让您头疼。反序列化后执行该任务会容易得多。做类似的事情:

var company = //deserialized value

foreach (var employee in company.employees)
{
    employee.employer = company;
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您更喜欢语法,也可以使用一行语句:

company.employees.ForEach(e => e.employer = company);
Run Code Online (Sandbox Code Playgroud)