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 用例全绿
This commit is contained in:
2026-08-17 14:00:47 +08:00
parent 990f10f98c
commit e24b73ee96
5 changed files with 16 additions and 14 deletions
-37
View File
@@ -1,37 +0,0 @@
/*
* Copyright (c) 2025 SimcuTeam. All rights reserved.
* 对齐 .NET System.Text.Json.Serialization 特性:
* - [SerializerPropertyName("xxx")] → @SerializerPropertyName["xxx"] 指定字段的 JSON 名称
* - [SerializerIgnore] → @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.json
/**
* 指定字段的 JSON 名称(对齐 .NET SerializerPropertyNameAttribute)。
* 用法:@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
}
}
/**
* 标记字段不做 JSON 处理(对齐 .NET SerializerIgnoreAttribute)。
* 用法:@SerializerIgnore public var _temp: String = ""
*/
@Annotation[target: [MemberVariable]]
public class SerializerIgnore {
public const init() {}
}
+1
View File
@@ -13,6 +13,7 @@ package simapi_serialization.json
import std.collection.*
import std.unittest.*
import std.unittest.testmacro.*
import simapi_serialization.*
import simapi_serialization.macros.*
enum Role {
+1
View File
@@ -11,6 +11,7 @@ package simapi_serialization.json
import std.collection.*
import std.reflect.*
import simapi_serialization.*
/**
* 单个字段的序列化元数据。