跳到主要内容
版本:1.5.0

支持的类型

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

基础类型

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

数组

  • 基础数值数组,例如 bool[]int[]ulong[]
  • byte[]
  • 通过集合序列化器支持的一般数组 T[]

集合

类 List

  • 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

用户类型

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

[ForyEnum] 的数值是无符号 32 位编码 tag,取值范围必须为 0..uint.MaxValue

不支持开放泛型的生成目标。当外部声明描述了一个完全匹配的封闭第三方泛型基类时, 非泛型普通 class 可以继承该基类。在 .NET 8 上,不支持声明所在类型或签名使用泛型的 private 编码成员;可见成员和显式的仅存储字段声明仍受支持。

动态类型

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

  • 基础值和对象值
  • 动态列表、集合、映射
  • 嵌套的动态结构

说明

  • 用户自定义类型应显式注册。
  • 跨语言使用时,请遵循 xlang 指南

相关主题