首页 > 解决方案 > 使用强制反向引用从最小 JSON 反序列化为分层对象

问题描述

假设那些分层对象结构:Tree➻<code>Branch➻<code>Leaf

public class Tree
{
    public string Name { get; set; }
    public List<Branch> Nodes { get; set; } = new List<Branch>();
}
public class Branch
{
    public Branch(Tree parent) { Parent = parent; }
    public Tree Parent { get; }
    public string Name { get; set; }
    public List<Leaf> Nodes { get; set; } = new List<Leaf>();
}
public class Leaf
{
    public Leaf(Branch parent) { Parent = parent; }
    public Branch Parent { get; }
    public string Name { get; set; }
}

一个不那么简单的序列化输出将是(使用ReferenceLoopHandling.SerializeAND PreserveReferencesHandling = PreserveReferencesHandling.Objects):

{
    "$id": "1",
    "Name": "AnOakTree",
    "Nodes": [
        {
            "$id": "2",
            "Parent": {
                "$ref": "1"
            },
            "Name": "TheLowestBranch",
            "Nodes": [
                {
                    "$id": "3",
                    "Parent": {
                        "$ref": "2"
                    },
                    "Name": "OneOfAMillionLeaf"
                }
            ]
        }
    ]
}

反序列化工作完美,没有什么可抱怨的!但我想完全省略引用处理以减少 JSON 占用空间并提高可读性

在没有参考信息的情况下反序列化 JSON 并使用正确的参数(父节点的实例)调用构造函数的最佳方法是什么?这样反向引用将由代码重新创建?

标签: c#json.net

解决方案


推荐阅读