refactor: @JsonPropertyName/@JsonIgnore target 收窄为仅 MemberVariable

序列化/反序列化只处理 var 成员变量(instanceVariables),不处理 prop 属性;
注解标到 prop 上现在直接编译报错,避免标了不生效的静默陷阱
This commit is contained in:
2026-08-17 11:00:35 +08:00
parent 8d10c31473
commit 9a656e60d8
+6 -2
View File
@@ -4,6 +4,10 @@
* - [JsonPropertyName("xxx")] → @JsonPropertyName["xxx"] 指定字段的 JSON 名称 * - [JsonPropertyName("xxx")] → @JsonPropertyName["xxx"] 指定字段的 JSON 名称
* - [JsonIgnore] → @JsonIgnore 序列化/反序列化时忽略该字段 * - [JsonIgnore] → @JsonIgnore 序列化/反序列化时忽略该字段
* *
* 设计决策:本库序列化/反序列化只处理「var 成员变量」(std.reflect 的 instanceVariables),
* 不处理 prop 属性(instanceProperties)。因此注解 target 仅限 MemberVariable
* 标到 prop 上会直接编译报错,避免「标了但不生效」的静默陷阱。
*
* 参考仓颉官方注解用法(std.reflect 运行时读取): * 参考仓颉官方注解用法(std.reflect 运行时读取):
* https://docs.cangjie-lang.cn/en/docs/1.0.0/libs/std/reflect/reflect_samples/annotation.html * https://docs.cangjie-lang.cn/en/docs/1.0.0/libs/std/reflect/reflect_samples/annotation.html
*/ */
@@ -14,7 +18,7 @@ package simapi_serialization.attributes
* 指定字段的 JSON 名称(对齐 .NET JsonPropertyNameAttribute)。 * 指定字段的 JSON 名称(对齐 .NET JsonPropertyNameAttribute)。
* 用法:@JsonPropertyName["user_name"] public var _username: String = "" * 用法:@JsonPropertyName["user_name"] public var _username: String = ""
*/ */
@Annotation[target: [MemberVariable, MemberProperty]] @Annotation[target: [MemberVariable]]
public class JsonPropertyName { public class JsonPropertyName {
public let name: String public let name: String
@@ -27,7 +31,7 @@ public class JsonPropertyName {
* 标记字段不做 JSON 处理(对齐 .NET JsonIgnoreAttribute)。 * 标记字段不做 JSON 处理(对齐 .NET JsonIgnoreAttribute)。
* 用法:@JsonIgnore public var _temp: String = "" * 用法:@JsonIgnore public var _temp: String = ""
*/ */
@Annotation[target: [MemberVariable, MemberProperty]] @Annotation[target: [MemberVariable]]
public class JsonIgnore { public class JsonIgnore {
public const init() {} public const init() {}
} }