加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 18:40:44 所属栏目:百科 来源:网络整理
导读:我有这个对象的Parent属性引用相同类型的另一个对象: [JsonObject(IsReference = true)]class Group{ public string Name { get; set; } public Group(string name) { Name = name; Children = new ListGroup(); } public IListGroup Children { get; set;
我有这个对象的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必须在创建父项之前反序列化所有子值,它需要将这些值传递给构造函数,因此没有有效的父引用分配给子项.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读