跳到主要内容
版本:0.16

引用

启用 TrackRef(true) 后,Apache Fory™ C# 可以保留共享引用和循环引用。

启用引用跟踪

Fory fory = Fory.Builder()
.TrackRef(true)
.Build();

启用后:

  • 会保留共享对象的身份语义。
  • 可以安全地序列化和反序列化循环对象图。

循环引用示例

using Apache.Fory;

[ForyObject]
public sealed class Node
{
public int Value { get; set; }
public Node? Next { get; set; }
}

Fory fory = Fory.Builder()
.TrackRef(true)
.Build();
fory.Register<Node>(200);

Node node = new() { Value = 7 };
node.Next = node;

byte[] payload = fory.Serialize(node);
Node decoded = fory.Deserialize<Node>(payload);

// 循环引用会被保留。
System.Diagnostics.Debug.Assert(object.ReferenceEquals(decoded, decoded.Next));

何时使用 TrackRef(false)

对于树状、无环且不关心引用身份的数据,TrackRef(false) 往往更快。

相关主题