feat: SimApiSerialization 全反射 JSON 序列化库 v1
对齐 .NET System.Text.Json: - JsonSerializer.Serialize(obj, JsonOption) / Deserialize<T>(jsonString, JsonOption) - @JsonPropertyName / @JsonIgnore 特性(运行时注解反射) - JsonOption:PropertyNamingPolicy(None/CamelCase/SnakeCase)、ignoreNull、maxDepth - 全反射实现:基础类型/枚举/Option/Array/ArrayList/HashSet/HashMap/嵌套对象 - 仓颉特性适配: * Option 是泛型枚举 → EnumTypeInfo.destruct/construct 处理 * 集合 get(i) 返回 Option<T> → Some/None 解包迭代 * 集合泛型不变 → 反射方法调用(toArray/get/add/keys)而非 cast * as 返回 Option → ?? 解包;JsonKind 用 is 判断 - 已知限制:反序列化需无参构造+var 字段;父类字段不序列化(平台严格类型校验); 枚举按名字;循环引用用深度上限保护 - 已实测:User 完整回环 + 数组/HashMap 回环 + 特性生效
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (c) 2025 SimcuTeam. All rights reserved.
|
||||
* JsonOption:序列化选项(对齐 .NET JsonSerializerOptions)。
|
||||
*/
|
||||
|
||||
package simapi_serialization
|
||||
|
||||
/**
|
||||
* 属性命名策略(对齐 .NET JsonNamingPolicy)。
|
||||
*/
|
||||
public enum PropertyNamingPolicy {
|
||||
/// 字段名原样(_username → _username)
|
||||
| None
|
||||
/// 去前导下划线 + 首字母小写(_username → username,对齐 simapi/soulsoft 默认)
|
||||
| CamelCase
|
||||
/// 蛇形(userName → user_name,_username → username)
|
||||
| SnakeCase
|
||||
}
|
||||
|
||||
/**
|
||||
* 序列化选项。
|
||||
*/
|
||||
public class JsonOption {
|
||||
/// 属性命名策略(默认 CamelCase)
|
||||
public var propertyNamingPolicy: PropertyNamingPolicy = PropertyNamingPolicy.CamelCase
|
||||
|
||||
/// 序列化时是否忽略 null/None 字段(默认 false:None 输出 null)
|
||||
public var ignoreNull: Bool = false
|
||||
|
||||
/// 枚举序列化为名字(默认 true;false 暂按名字输出,数字模式后续支持)
|
||||
public var enumAsString: Bool = true
|
||||
|
||||
/// 递归深度上限(默认 64)
|
||||
public var maxDepth: Int64 = 64
|
||||
|
||||
public init() {}
|
||||
|
||||
/// 默认选项实例
|
||||
public static let instance = JsonOption()
|
||||
}
|
||||
Reference in New Issue
Block a user