References
Apache Fory™ C# can preserve shared and circular references when TrackRef(true) is enabled.
Enable Reference Tracking
Fory fory = Fory.Builder()
.TrackRef(true)
.Build();
When enabled:
- Shared object identity is preserved.
- Circular object graphs can be serialized/deserialized safely.
Circular Reference Example
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));
When to Use TrackRef(false)
TrackRef(false) can be faster for tree-like, acyclic data where reference identity does not matter.