Commit Graph
8 Commits
Author SHA1 Message Date
xrain 4e4e6e866c 包名迁移: simapi_serialization → simcu::serialization(org=simcu) 2026-08-18 04:26:31 +08:00
xrain c6269df957 feat: 新增 TypeInfo 版反序列化入口——按运行时类型反序列化
- JsonSerializer.Deserialize(typeInfo, jsonString[, options]): Any
- JsonReader.read(typeInfo, value, options): Any
- 供框架运行时模型绑定等场景使用(无需编译期泛型)
2026-08-18 00:27:22 +08:00
xrain 94f306e57a chore: 发布准备——修复 cjlint MANDATORY 错误 + 补 org 配置
publish 流程会执行 cjlint(error 即阻塞),修复:
- 测试枚举 Role.User 与类型名 User 冲突 → 改名 Role.Member(G.ENU.01)
- 测试用例函数补 : Unit 返回类型(G.DCL.02)
- JsonOption.instance 补显式类型(G.DCL.02)
- JsonReader.readParentFields 移除未使用 options 参数(G.FUN.02)
- Annotations.cj 移除硬编码 URL(G.OTH.03)
- 宏 FieldVisitor.visit 补 : Unit(G.DCL.02)
- cjpm.toml 增加 org = "simcu"(publish 自动写入)

cjpm bundle 已可成功生成 simapi_serialization-1.0.0.cjp,
剩余阻塞:中心仓认证(pkg.cangjie-lang.cn 需用户 token)
2026-08-17 14:19:44 +08:00
xrain f593f96d9a refactor: 新增 common 子包——XML/JSON 共用部分 + 单 import 全量可用
- src/common/(package simapi_serialization.common):
  Annotations.cj(@SerializerPropertyName/@SerializerIgnore)、
  ReflectionCache.cj(字段元数据 + 继承链缓存)、NamingPolicy.cj(PropertyNamingPolicy)
- 根锚点 public import common.* + json.*:import simapi_serialization.* 即可用全部
- JsonOption.propertyNamingPolicy 引用 common 枚举;getFields 改收命名策略
- 枚举值 PropertyNamingPolicy.None → Keep(None 与内置 Option.None 构造器同名冲突)
- JsonWriter/JsonReader 单类 import common,避免循环依赖
- 测试/独立项目验证:16 用例全绿;serialization_test 单 import 即可运行
2026-08-17 14:06:13 +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
xrain 0bc7e213f9 refactor: 全部实现移入 json 子包,attributes 改名 annotations
- src/Json*.cj → src/json/(包 simapi_serialization.json,对应 .NET System.Text.Json)
- src/attributes → src/json/annotations/(包 simapi_serialization.json.annotations)
- 根包 simapi_serialization 保留为 cjpm 扫描锚点,public import 重导出 json + annotations
- 用法:import simapi_serialization.*(重导出)或 import simapi_serialization.json.* / .json.annotations.*
2026-08-17 11:03:01 +08:00