跳到主要内容
版本:dev

支持的类型

本页汇总 Apache Fory™ C# 对内置类型和生成类型的支持。

原始类型

C# 类型说明
bool支持
sbyte, short, int, long支持
byte, ushort, uint, ulong支持
float, double支持
Half, BFloat16支持
string支持
byte[]支持
可空原始类型(例如 int?支持

数组

  • 原始数值数组(bool[]int[]ulong[] 等)
  • 使用 Half[]List<Half>S.Array<S.Float16> 表示 array<float16>
  • 使用 BFloat16[]List<BFloat16>S.Array<S.BFloat16> 表示 array<bfloat16>
  • byte[]
  • 通过集合序列化器支持通用数组(T[]

集合

类列表类型

  • List<T>
  • LinkedList<T>
  • Queue<T>
  • Stack<T>

类 set 类型

  • HashSet<T>
  • SortedSet<T>
  • ImmutableHashSet<T>

类 map 类型

  • Dictionary<TKey, TValue>
  • SortedDictionary<TKey, TValue>
  • SortedList<TKey, TValue>
  • ConcurrentDictionary<TKey, TValue>
  • NullableKeyDictionary<TKey, TValue>

时间类型

C# 类型编码类型
DateOnlyDate
DateTimeTimestamp
DateTimeOffsetTimestamp
TimeSpanDuration

用户类型

  • 通过源码生成序列化器支持带 [ForyStruct] 的 class/struct
  • 当每个第一方类都直接添加注解时支持普通类继承层次;具体序列化器使用一个扁平 Schema
  • 使用 [ForyField] 选择私有或 protected 的普通基类成员
  • 通过一个显式外部声明描述未修改的第三方基类继承层次
  • [ForyEnum] 的 enum 和带 [ForyUnion] 的 ADT record
  • 通过序列化器声明支持外部 class、struct 和 enum 目标
  • 通过 Register<T, TSerializer>(...) 注册的自定义序列化器类型
  • 支持 Union / Union2<...> 类型化 union

[ForyEnum] 数值是无符号 32 位编码标签,必须位于 0..uint.MaxValue 范围内。

不支持开放泛型生成目标。如果外部声明描述了精确的封闭第三方泛型基类,非泛型普通类可以继承该基类。在 .NET 8 上,不支持声明类型或签名为泛型的私有编码成员;可见成员和显式的仅存储字段声明仍受支持。

动态类型

通过 Serialize<object?> / Deserialize<object?> 处理的动态对象载荷支持:

  • 原始值和 object 值
  • 动态 list/set/map
  • 嵌套动态结构

注意事项

  • 应显式注册用户定义类型。
  • 跨语言用法请遵循跨语言指南

相关主题