跳到主要内容
版本:0.17

引用

当启用 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);

// The cycle is preserved.
System.Diagnostics.Debug.Assert(object.ReferenceEquals(decoded, decoded.Next));

何时使用 TrackRef(false)

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

相关主题