fix: isNoneValue 误判非 Option 值为 None(ignoreNull 时所有字段被跳过)

- 原实现 unwrapOptionValue(v).isNone() 把「非 Option」也返回 None → isNone()=true
- 改为直接检查 EnumTypeInfo.destruct 构造器名是否 None,非枚举返回 false
- 新增 None 字段测试(remark → null;ignoreNull=true 时省略 remark 保留其他)
This commit is contained in:
2026-08-17 11:20:12 +08:00
parent de875234e4
commit ff1bd51f52
+6 -2
View File
@@ -151,9 +151,13 @@ public class JsonWriter {
}
}
/// 判断 Any 值是否为 NoneOption 枚举的 None 构造器)
/// 判断 Any 值是否为 NoneOption 枚举的 None 构造器;非 Option 值返回 false
private static func isNoneValue(v: Any): Bool {
unwrapOptionValue(v).isNone()
if (let et: EnumTypeInfo <- TypeInfo.of(v)) {
let (ctor, _) = et.destruct(v)
return ctor.name == "None"
}
false
}
/// 若值为 Option 的 Some(x) 返回 Some(x)None 或非 Option 返回 None