反序列化JSON树结构并设置父级这似乎是一个非常基本的问题,但我很想找到一个优雅的解决方案。我有一个用于构建树结构的Node类。然后使用JsonConvert.SerializeObject(..)将其序列化为JSON。为了在序列化时防止循环引用,我在Parent属性上放置了一个JsonIgnore属性。这显然意味着父节点没有被序列化为结果JSON输出中每个节点的一部分。当我反序列化相同的JSON字符串时,我希望为Node对象分配正确的Parent以便我可以轻松地向上遍历树。实现这一目标的最干净、最简单的方法是什么?[JsonObject]publicclassNode:IEnumerable{publicGuidId{get;放;}公共字符串名称{得到;放;}[JsonIgnore]publicNodeParent{get;私有集;}[JsonProperty("Children")]privatereadonlyDictionary_children=newDictionary();公共节点(){Id=Guid.NewGuid();}publicvoidAdd(NodedepartmentNode){if(node.Parent!=null){node.Parent._children.Remove(node.Id);}node.Parent=this;_children.Add(node.Id,node);}publicIEnumeratorGetEnumerator(){return_children.Values.GetEnumerator();}IEnumeratorIEnumerable.GetEnumerator(){返回GetEnumerator();您可以完全摆脱Parent并在需要查找时使用FindParent(node.Id)之类的东西。如果那不可行(应该可行)并且您需要父引用,我的建议是遍历树并在反序列化后设置父引用。我所做的只是忽略Parent的序列化并实现一个名为Children的公共属性来设置我的私有ChildrenDict集合。当我将孩子添加到私有字典时,我还设置了每个孩子的Parent属性。就个人而言,我不喜欢用特定于JSON的属性污染我的数据类,因为我喜欢独立的序列化设计。话虽如此,最终的解决方案是不使用JsonIgnoreAttribute标记并定义:也可以定义SetParent()方法,尽管在我的代码中我根本不需要它。本代码使用NewtonsoftJson序列化和DotNET4.5.2测试以上是C#学习教程:反序列化json树结构并设置parent共享所有内容,如果对大家有用还需要进一步了解C#学习教程,希望大家多多关注——usingSystem.Collections.Generic;使用System.Linq;namespaceJsonSerializableNode{publicclassNode{privateNode(){}//用于反序列化publicNode(stringname,Nodeparent)//在代码中的其他地方使用{Name=name;父母=父母;}公共字符串名称{得到;放;}privateNodeParent{get;放;}publicNodeGetParent(){返回父节点;}publicNode[]Children{get{returnChildrenDict.Values.ToArray();}设置{ChildrenDict.Clear();if(value==null||value.CountChildrenDict{get;}=newDictionary();publicNodeAdd(Nodechild){ChildrenDict.Add(child.Name,child);child.Parent=this;returnchild;}}publicNodeGet(stringname){returnChildrenDict[name];}publicboolRemove(stringname){returnChildrenDict.Remove(name);}}书文章收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
