引用
当启用 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) 往往更快。