类型注册
本页介绍如何在 Apache Fory™ C# 中注册用户类型。
按数字类型 ID 注册
使用显式 ID 获得紧凑且稳定的跨服务映射。
Fory fory = Fory.Builder().Build();
fory.Register<User>(100);
fory.Register<Order>(101);
按类型名称注册
偏好符号映射时使用名称注册。单字符串重载接受完整的用户可见名称,并在最后一个点处分割。
Fory fory = Fory.Builder().Build();
fory.Register<User>("com.example.User");
不包含点的名称使用空命名空间:
fory.Register<User>("User");
如果已经分别取得命名空间和最终类型名称,也可以使用分离参数的重载:
fory.Register<User>("com.example", "User");
注册自定义序列化器
Fory fory = Fory.Builder().Build();
fory.Register<MyType, MyTypeSerializer>(200);
也支持按名称注册自定义序列化器:
fory.Register<MyType, MyTypeSerializer>("com.example.MyType");
线程安全注册
ThreadSafeFory 公开相同的注册 API。注册信息会传播到所有线程各自的 Fory 实例。
using ThreadSafeFory fory = Fory.Builder().BuildThreadSafe();
fory.Register<User>(100);
fory.Register<Order>(101);
注册规则
- 在写入端和读取端都注册用户定义类型。
- 跨服务和语言保持 ID/名称映射一致。
- 对于外部类型序列化,请注册第三方目标,例如
fory.Register<ThirdParty.User>(100),不要注册本地序列化器声明。 - 按具体类型注册具体派生类。带注解的抽象基类和设置了
BaseOnly = true的外部声明为派生类型提供 Schema,不进行注册。 - 直接为可序列化继承层次中的每个第一方类添加注解。注册派生类不会使未注解的基类可序列化。
- 对于分离参数的重载,
typeName不得为空且不得包含点。 - 在大规模序列化工作负载开始前完成注册,避免缺少类型元信息。