C# 如何有选择地使用PreserveReferencesHandling.Objects?

C# 如何有选择地使用PreserveReferencesHandling.Objects?,c#,.net,json.net,C#,.net,Json.net,我有一个序列化为JSON的对象结构,有一个路径可以有循环引用。这个问题可以通过使用PreserveReferencesHandling.Objects来解决,但不幸的是,它创建了另一个问题,因为它将$id属性添加到所有对象中。我不想把序列化数据弄得乱七八糟,因为它应该是人类可读和可编辑的。 所以,问题是有没有办法让它只向那些实际包含在引用循环中的对象添加$id?以便只序列化参与引用循环的对象的$id属性,有必要对序列化图进行初始传递,以标识所有此类对象——但Json.NET是单次传递序列化程序,

我有一个序列化为JSON的对象结构,有一个路径可以有循环引用。这个问题可以通过使用
PreserveReferencesHandling.Objects
来解决,但不幸的是,它创建了另一个问题,因为它将
$id
属性添加到所有对象中。我不想把序列化数据弄得乱七八糟,因为它应该是人类可读和可编辑的。
所以,问题是有没有办法让它只向那些实际包含在引用循环中的对象添加
$id

以便只序列化参与引用循环的对象的
$id
属性,有必要对序列化图进行初始传递,以标识所有此类对象——但Json.NET是单次传递序列化程序,因此不容易实现。如果有帮助,可以将
#id
属性限制为特定类型,请参见或。@dbc I可以在序列化之前执行循环检测,但在这种情况下,有必要在Json.NET中使用此信息,以便仅在必要时附加ID。