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:
@@ -151,9 +151,13 @@ public class JsonWriter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 判断 Any 值是否为 None(Option 枚举的 None 构造器)
|
/// 判断 Any 值是否为 None(Option 枚举的 None 构造器;非 Option 值返回 false)
|
||||||
private static func isNoneValue(v: Any): Bool {
|
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
|
/// 若值为 Option 的 Some(x) 返回 Some(x);None 或非 Option 返回 None
|
||||||
|
|||||||
Reference in New Issue
Block a user