跳到主要内容
版本:dev

跨语言序列化

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 指南

最佳实践

  1. 保持 type ID 稳定并做好文档记录。
  2. 在滚动升级时启用 Compatible(true)
  3. 在读写两端都注册所有用户类型。
  4. 用真实载荷做端到端回环验证。

相关主题