Skip to main content
Version: dev

Configuration

This page covers ForyBuilder options and default configuration values for Apache Fory™ C#. Config is an immutable configuration snapshot created by ForyBuilder.

Build a Fory Instance

using Apache.Fory;

Fory fory = Fory.Builder().Build();
ThreadSafeFory threadSafe = Fory.Builder().BuildThreadSafe();

Default Configuration

Fory.Builder().Build() uses:

OptionDefaultDescription
TrackReffalseReference tracking disabled
CompatibletrueCompatible schema-evolution metadata enabled
CheckStructVersionfalseStruct schema hash checks disabled
MaxDepth20Max dynamic nesting depth

Builder Options

C# always uses xlang-compatible framing, so ForyBuilder does not expose a mode toggle.

TrackRef(bool enabled = false)

Enables reference tracking for shared/circular object graphs.

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

Compatible(bool enabled = false)

Enables schema evolution mode. C# uses the xlang wire format only, so compatible mode is enabled by default for independently deployed peers. Use .Build() without calling this method for the default compatible mode. Passing false, or calling Compatible() without an argument, opts into same-schema payloads. Use that only when every reader and writer always uses the same schema and you want faster serialization and smaller size. For cross-language payloads, call Compatible(false) only after verifying that every peer uses the same schema, or when native types are generated from Fory schema IDL.

Fory fory = Fory.Builder()
.Compatible(false)
.Build();

CheckStructVersion(bool enabled = false)

Checks the schema hash when you intentionally use same-schema payloads.

Fory fory = Fory.Builder()
.Compatible(false)
.CheckStructVersion(true)
.Build();

MaxDepth(int value)

Sets max nesting depth for dynamic object graphs.

Fory fory = Fory.Builder()
.MaxDepth(32)
.Build();

value must be greater than 0.

Common Configurations

Compatible service

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

Same-schema optimization

Use this only when every reader and writer always uses the same schema.

Fory fory = Fory.Builder()
.Compatible(false)
.Build();

Thread-safe service instance

ThreadSafeFory fory = Fory.Builder()
.TrackRef(true)
.BuildThreadSafe();

Security

Security-related configuration:

  • Register only the expected types before deserializing untrusted payloads.
  • Use CheckStructVersion(true) with Compatible(false) for intentional same-schema payloads.
  • Set MaxDepth(...) to reject unexpectedly deep dynamic object graphs.
  • Prefer generated or registered concrete models over broad dynamic fields for untrusted input.