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
+2 -2
View File
@@ -171,7 +171,7 @@ soulsoft 的 API 带泛型约束 `where T <: ISerializable`,不标宏的类在
### 3.1 宏定义 ### 3.1 宏定义
```cangjie ```cangjie
// 文件:src/json/SerializerParentMacro.cj // 文件:src/macros/SerializerParentMacro.cj
// 包:simapi_serialization.json(宏包需单独编译,见 3.3) // 包:simapi_serialization.json(宏包需单独编译,见 3.3)
macro package simapi_serialization.json macro package simapi_serialization.json
@@ -535,7 +535,7 @@ main() {
## 9. 实施步骤(评审通过后) ## 9. 实施步骤(评审通过后)
1. 新建宏文件 `src/json/SerializerParentMacro.cj`(或独立宏包),实现 `SerializerParent` 宏; 1. 新建宏文件 `src/macros/SerializerParentMacro.cj`(或独立宏包),实现 `SerializerParent` 宏;
2. 验证 cjpm 对宏包的编译流程(风险 #1),必要时调整项目结构; 2. 验证 cjpm 对宏包的编译流程(风险 #1),必要时调整项目结构;
3.`JsonWriter.writeObject`superClass 链调用 `exportJsonFields` 3.`JsonWriter.writeObject`superClass 链调用 `exportJsonFields`
4.`JsonReader.readObject`superClass 链调用 `importJsonFields` 4.`JsonReader.readObject`superClass 链调用 `importJsonFields`
@@ -1,8 +1,8 @@
/* /*
* Copyright (c) 2025 SimcuTeam. All rights reserved. * Copyright (c) 2025 SimcuTeam. All rights reserved.
* 对齐 .NET System.Text.Json.Serialization 特性: * 序列化注解(对齐 .NET System.Text.Json.Serialization 特性
* - [SerializerPropertyName("xxx")] → @SerializerPropertyName["xxx"] 指定字段的 JSON 名称 * - [JsonPropertyName("xxx")] → @SerializerPropertyName["xxx"] 指定字段的序列化名称
* - [SerializerIgnore] → @SerializerIgnore 序列化/反序列化时忽略该字段 * - [JsonIgnore] → @SerializerIgnore 序列化/反序列化时忽略该字段
* *
* 设计决策:本库序列化/反序列化只处理「var 成员变量」(std.reflect 的 instanceVariables), * 设计决策:本库序列化/反序列化只处理「var 成员变量」(std.reflect 的 instanceVariables),
* 不处理 prop 属性(instanceProperties)。因此注解 target 仅限 MemberVariable * 不处理 prop 属性(instanceProperties)。因此注解 target 仅限 MemberVariable
@@ -12,10 +12,10 @@
* 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
*/ */
package simapi_serialization.json package simapi_serialization
/** /**
* 指定字段的 JSON 名称(对齐 .NET SerializerPropertyNameAttribute)。 * 指定字段的序列化名称(对齐 .NET JsonPropertyNameAttribute)。
* 用法:@SerializerPropertyName["user_name"] public var _username: String = "" * 用法:@SerializerPropertyName["user_name"] public var _username: String = ""
*/ */
@Annotation[target: [MemberVariable]] @Annotation[target: [MemberVariable]]
@@ -28,7 +28,7 @@ public class SerializerPropertyName {
} }
/** /**
* 标记字段不做 JSON 处理(对齐 .NET SerializerIgnoreAttribute)。 * 标记字段不做序列化处理(对齐 .NET JsonIgnoreAttribute)。
* 用法:@SerializerIgnore public var _temp: String = "" * 用法:@SerializerIgnore public var _temp: String = ""
*/ */
@Annotation[target: [MemberVariable]] @Annotation[target: [MemberVariable]]
+6 -6
View File
@@ -1,12 +1,12 @@
/* /*
* Copyright (c) 2025 SimcuTeam. All rights reserved. * Copyright (c) 2025 SimcuTeam. All rights reserved.
* *
* simapi_serialization 根包锚点(cjpm 要求 src 根目录至少有一个 .cj 文件,否则不扫描子目录) * simapi_serialization 根包锚点:注解类(@SerializerPropertyName / @SerializerIgnore)同包于此
* 全部实现位于子包 simapi_serialization.json(对应 .NET System.Text.Json)。 * 序列化器位于子包 simapi_serialization.json(对应 .NET System.Text.Json)。
* 通过 public import 重导出:`import simapi_serialization.*` 仍可直接使用 *
* JsonSerializer / JsonOption / @SerializerPropertyName / @SerializerIgnore 等。 * 用法:
* import simapi_serialization.* // 注解
* import simapi_serialization.json.* // JsonSerializer / JsonOption
*/ */
package simapi_serialization package simapi_serialization
public import simapi_serialization.json.*
+1
View File
@@ -13,6 +13,7 @@ package simapi_serialization.json
import std.collection.* import std.collection.*
import std.unittest.* import std.unittest.*
import std.unittest.testmacro.* import std.unittest.testmacro.*
import simapi_serialization.*
import simapi_serialization.macros.* import simapi_serialization.macros.*
enum Role { enum Role {
+1
View File
@@ -11,6 +11,7 @@ package simapi_serialization.json
import std.collection.* import std.collection.*
import std.reflect.* import std.reflect.*
import simapi_serialization.*
/** /**
* 单个字段的序列化元数据。 * 单个字段的序列化元数据。