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