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必须在创建父项之前反序列化所有子值,它需要将这些值传递给构造函数,因此没有有效的父引用分配给子项. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |