Commit Graph
4 Commits
Author SHA1 Message Date
xrain e24b73ee96 refactor: JsonAnnotations.cj 移至根目录改名 Annotations.cj
- 注解类 SerializerPropertyName/SerializerIgnore 从 simapi_serialization.json
  子包移至根包 simapi_serialization(文件 src/Annotations.cj)
- 打破循环依赖:根锚点不再 public import json 子包,序列化器由用户显式
  import simapi_serialization.json.*
- ReflectionCache / 测试文件补 import simapi_serialization.*
- serialization_test 同步补 import simapi_serialization.json.*
- 16 用例全绿
2026-08-17 14:00:47 +08:00
xrain 990f10f98c refactor: 注解与宏改名——Serializer 前缀统一命名
- @JsonPropertyName → @SerializerPropertyName
- @JsonIgnore → @SerializerIgnore
- @JsonParent → @SerializerParent(宏文件 JsonParentMacro.cj → SerializerParentMacro.cj)
- 同步更新:JsonAnnotations、ReflectionCache、宏内部注解判断、
  测试、方案文档、serialization_test 独立项目
- 16 用例全绿
2026-08-17 13:58:05 +08:00
xrain affadac6c2 feat: 实现 @JsonParent 宏——父类字段序列化/反序列化支持
- 新增 src/macros/JsonParentMacro.cj(macro package simapi_serialization.macros):
  标注父类自动补 open,收集 public var 字段(跳过 @JsonIgnore,
  @JsonPropertyName 用注解名),字符串拼接生成静态方法:
    exportJsonFields(instance: T): HashMap<String, Any>
    importJsonFields(instance: T, json: HashMap<String, Any>): Unit
- JsonWriter.writeParentFields:沿 superClass 链调用 exportJsonFields 合并父类字段
- JsonReader.readParentFields:沿 superClass 链调用 importJsonFields 回填父类字段
- ReflectionCache 增加 hasExportFields/hasImportFields 缓存(避免每次反射查找)
- 测试:16 用例全绿——新增 parentMacroMethods、multiLevelInheritance、
  parentAutoOpen;更新 objectSerialize/objectRoundTrip 断言父类字段输出
2026-08-17 13:41:16 +08:00
xrain e83bcaf68c test: 新增 JsonSerializer 单元测试(cjpm test,13 用例);fix: 顶层 Deserialize<?T>(null) 返回类型化 None
- 覆盖:基础类型、对象字段输出(下划线保留/注解/忽略/None→null/继承限制)、
  Array/ArrayList/HashSet/HashMap 往返、枚举、命名策略、Option 字段、
  宽松类型转换、maxDepth
- 修复 JsonReader:Option 反序列化 null 时用反射构造目标类型 None 构造器
  (反射层 Option 构造器统一按 1 参数槽登记),而非返回裸 None 导致
  read<T> 类型不匹配异常
2026-08-17 12:11:35 +08:00