【发布时间】:2016-05-27 11:26:31
【问题描述】:
这似乎是一个非常基本的问题,但我正在努力寻找一个优雅的解决方案。我有一个用来构建树结构的 Node 类。然后使用JsonConvert.SerializeObject(..) 将其序列化为 JSON。为了防止序列化时出现循环引用,我在 Parent 属性上放置了一个JsonIgnore 属性。
这显然意味着父节点没有被序列化为结果 JSON 输出中每个节点的一部分。
当我反序列化相同的 JSON 字符串时,我希望为 Node 对象分配正确的 Parent,以便我可以轻松地向上遍历树。实现这一目标的最干净、最简单的方法是什么?
[JsonObject]
public class Node : IEnumerable<Node>
{
public Guid Id { get; set; }
public string Name { get; set; }
[JsonIgnore]
public Node Parent { get; private set; }
[JsonProperty("Children")]
private readonly Dictionary<Guid, Node> _children = new Dictionary<Guid, Node>();
public Node()
{
Id = Guid.NewGuid();
}
public void Add(Node departmentNode)
{
if (node.Parent != null)
{
node.Parent._children.Remove(node.Id);
}
node.Parent = this;
_children.Add(node.Id, node);
}
public IEnumerator<Node> GetEnumerator()
{
return _children.Values.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
【问题讨论】:
标签: c# json serialization json.net deserialization