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 即可运行
This commit is contained in:
1 parent
e24b73ee96
commit
f593f96d9a
8 files changed
+58
-31
No files matched your search
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright (c) 2025 SimcuTeam. All rights reserved.
|
||||
* 序列化注解(对齐 .NET System.Text.Json.Serialization 特性):
|
||||
* - [JsonPropertyName("xxx")] → @SerializerPropertyName["xxx"] 指定字段的序列化名称
|
||||
* - [JsonIgnore] → @SerializerIgnore 序列化/反序列化时忽略该字段
|
||||
*
|
||||
* 设计决策:本库序列化/反序列化只处理「var 成员变量」(std.reflect 的 instanceVariables),
|
||||
* 不处理 prop 属性(instanceProperties)。因此注解 target 仅限 MemberVariable:
|
||||
* 标到 prop 上会直接编译报错,避免「标了但不生效」的静默陷阱。
|
||||
*
|
||||
* 参考仓颉官方注解用法(std.reflect 运行时读取):
|
||||
* https://docs.cangjie-lang.cn/en/docs/1.0.0/libs/std/reflect/reflect_samples/annotation.html
|
||||
*/
|
||||
|
||||
package simapi_serialization.common
|
||||
|
||||
/**
|
||||
* 指定字段的序列化名称(对齐 .NET JsonPropertyNameAttribute)。
|
||||
* 用法:@SerializerPropertyName["user_name"] public var _username: String = ""
|
||||
*/
|
||||
@Annotation[target: [MemberVariable]]
|
||||
public class SerializerPropertyName {
|
||||
public let name: String
|
||||
|
||||
public const init(name: String) {
|
||||
this.name = name
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 标记字段不做序列化处理(对齐 .NET JsonIgnoreAttribute)。
|
||||
* 用法:@SerializerIgnore public var _temp: String = ""
|
||||
*/
|
||||
@Annotation[target: [MemberVariable]]
|
||||
public class SerializerIgnore {
|
||||
public const init() {}
|
||||
}
|
||||
Reference in new issue
Block a user