跨语言序列化
Apache Fory™ C# 支持与其他 Fory 运行时进行跨语言序列化。
启用跨语言模式
C# 默认使用 Xlang(true),但在互操作代码中显式配置仍是更稳妥的做法。
Fory fory = Fory.Builder()
.Xlang(true)
.Compatible(true)
.Build();
使用稳定 ID 注册
[ForyObject]
public sealed class Person
{
public string Name { get; set; } = string.Empty;
public int Age { get; set; }
}
Fory fory = Fory.Builder()
.Xlang(true)
.Compatible(true)
.Build();
fory.Register<Person>(100);
所有语言侧都应使用相同的 ID 映射。
按命名空间 / 类型名注册
fory.Register<Person>("com.example", "Person");
跨语言示例
C#(序列化端)
Person person = new() { Name = "Alice", Age = 30 };
byte[] payload = fory.Serialize(person);
Java(反序列化端)
Fory fory = Fory.builder()
.withLanguage(Language.XLANG)
.withRefTracking(true)
.build();
fory.register(Person.class, 100);
Person value = (Person) fory.deserialize(payloadFromCSharp);
Python(反序列化端)
import pyfory
fory = pyfory.Fory(xlang=True, ref=True)
fory.register_type(Person, type_id=100)
value = fory.deserialize(payload_from_csharp)
类型映射参考
完整映射请参见 xlang 指南。
最佳实践
- 保持类型 ID 稳定,并做好文档记录。
- 滚动升级场景下启用
Compatible(true)。 - 在读写两端都注册所有用户类型。
- 使用真实载荷做端到端往返验证。