我正在编写一些序列化和反序列化复杂数据结构的代码。
我有一个 C# 数据模型,由三个类组成:
TypeA
、TypeB
和 TypeC
。
TypeA
引用了 TypeB
,TypeB
引用了 TypeA
,TypeC
引用了 TypeB
的两个实例。
当尝试使用
System.Text.Json
序列化这些对象时,我遇到了由于循环依赖而导致的问题。
这是我的代码的简化版本:
using System;
using System.Collections.Generic;
using System.Text.Json;
public class TypeA
{
public int Id { get; set; }
public string Name { get; set; }
public TypeB LinkedB { get; set; }
}
public class TypeB
{
public int Id { get; set; }
public string Description { get; set; }
public TypeA LinkedA { get; set; }
}
public class TypeC
{
public int Id { get; set; }
public string Note { get; set; }
public TypeB Reference1 { get; set; }
public TypeB Reference2 { get; set; }
}
public class ObjectToSerialize
{
public List<TypeA> Data { get; set; }
public List<TypeC> links { get; set; }
}
我并不真正关心序列化数据是什么样子,因为我将使用相同的代码将其反序列化回相同的数据模型。
我已经看过了
RefrenceHandler
,但我觉得这只能解决两个参考文献之一,而不是两个。 (如有错误请指正)
我正在寻找一种解决方案来使用
System.Text.Json
序列化这些对象,以便原始引用保持完整。
如何在保持接近原始数据模型和默认方式
System.Text.Json
序列化对象的同时实现这一目标?
我愿意编写自定义转换器、修改数据模型或在必要时使用不同的序列化库。
任何见解或解决方法将不胜感激。
谢谢!
Newtonsoft有一个解决方案: 请阅读:关于 PreserveReferencesHandling 的说明