Json.NET 当只读 属性 与 object 引用一起使用时失败?

Json.NET failing when readonly property is used with object references?

编辑 2016-12-05: 这被认为是一个错误并已修复:Readonly property corrupts normal property object references. #486

原post:

我刚开始使用 Json.NET,但遇到了一些看起来像是错误的奇怪行为。

如果反序列化器遇到最初在只读属性(get; only)中定义的object引用(“$ref”:“2”),它无法反序列化并且returns 改为 null。

Class

public class Parent
{
    public Child ReadOnlyChild
    {
        get
        {
            return Child;
        }
    }

    public Child Child {get; set;}
}
public class Child
{
}

序列化:

Parent p = new Parent() { Child = new Child() };
JsonConvert.SerializeObject(p, new JsonSerializerSettings()
{ Formatting = Formatting.Indented,
  PreserveReferencesHandling = PreserveReferencesHandling.Objects });

已连载:

{
  "$id": "1",
  "ReadOnlyChild": {
    "$id": "2",
  },
  "Child": {
    "$ref": "2"
  }
}

反序列化(并重新序列化以显示更改):

{
  "$id": "1",
  "ReadOnlyChild": null,
  "Child": null
}

这是预期的行为、错误,还是我遗漏了什么?

请注意,有时需要 [JsonProperty(Order = #)] 来强制序列化程序首先作用于 ReadOnlyChild。无论如何,上面的序列化 JSON 块将无法正确反序列化,即使 class 已被修改为先反序列化 Child。

编辑:我担心 Child 属性 被取消,而不是 ReadOnlyChild 被 Json.NET[=45 以某种方式赋值=]

谢谢!

您是否考虑过阻止 属性 被 Json.Net 序列化?

public class Parent
{
    [JsonIgnore] 
    public Child ReadOnlyChild
    {
        get
        {
            return Child;
        }
    }

    public Child Child {get; set;}
}