json.net – 自引用属性的反序列化不起作用

前端之家收集整理的这篇文章主要介绍了json.net – 自引用属性的反序列化不起作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个对象的Parent属性引用相同类型的另一个对象:

[JsonObject(IsReference = true)]
class Group
{
    public string Name { get; set; }

    public Group(string name)
    {
        Name = name;
        Children = new List<Group>();
    }

    public IList<Group> Children { get; set; }

    public Group Parent { get; set; }

    public void AddChild(Group child)
    {
        child.Parent = this;
        Children.Add(child);
    }
}

序列化工作正常,导致json看起来像这样:

{
  "$id": "1","Name": "Parent","Children": [
    {
      "$id": "2","Name": "Child","Children": [],"Parent": {
        "$ref": "1"
      }
    }
  ],"Parent": null
}

但反序列化不起作用. Parent属性返回null.

测试看起来像这样:

[Test]
public void Test()
{
    var child = new Group("Child");
    var parent = new Group("Parent");
    parent.AddChild(child);

    var json = JsonConvert.SerializeObject(parent,Formatting.Indented);
    Debug.WriteLine(json);

    var deserializedParent = (Group) JsonConvert.DeserializeObject(json,typeof(Group));
    Assert.IsNotNull(deserializedParent.Children.First().Parent);
}

我究竟做错了什么?任何帮助赞赏!

解决方法

使用引用不适用于仅包含带参数的构造函数的对象.

Json.NET必须在创建父项之前反序列化所有子值,它需要将这些值传递给构造函数,因此没有有效的父引用分配给子项.

猜你在找的Json相关文章