跨语言序列化
Apache Fory™ C# 支持与其他 Fory 运行时进行跨语言序列化。
跨语言运行时
C# 始终会读写 xlang 帧头。它没有单独的 Xlang(...) 构建器选项,因此互操作代码只需要配置兼容模式、引用跟踪等其余运行时行为。
Fory fory = Fory.Builder()
.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()
.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 指南。
最佳实践
- 保持 type ID 稳定并做好文档记录。
- 在滚动升级时启用
Compatible(true)。 - 在读写两端都注册所有用户类型。
- 用真实载荷做端到端回环验证。