c# - 使用强制反向引用从最小 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.Serialize
AND 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 并使用正确的参数(父节点的实例)调用构造函数的最佳方法是什么?这样反向引用将由代码重新创建?
解决方案
推荐阅读
- java - 将多个json对象转换为Java中的对象数组
- vim - 运行 vim 脚本的最简单方法
- python - 在pyqt5中的init和事件函数之间计算QWidget问题的高度
- go - 在泛型 go 中模拟方法类型参数
- python - 捕获类文本 - Selenium Python
- apache-spark - pyspark 动态选择列并写入单列
- javascript - 等于 document.getElementById 的变量并像 jQuery 的 $?
- javascript - 如何延迟对作为道具子项传递给另一个组件的 JSX 的评估?
- vb.net - CAML 查询未使用 vb.net VS2019 和 Sharepoint 在线检索所有字段
- sql - 用 PS 连接 SQL,找不到驱动器