feat: JsonWriter/JsonReader 支持 DateTime 字段(序列化为 yyyy-MM-dd HH:mm:ss 字符串,可反序列化回,含 Option<DateTime>)
This commit is contained in:
@@ -12,6 +12,7 @@ package simcu::serialization.json
|
||||
import std.collection.*
|
||||
import std.convert.*
|
||||
import std.reflect.*
|
||||
import std.time.*
|
||||
import stdx.encoding.json.*
|
||||
import simcu::serialization.common.ReflectionCache
|
||||
import simcu::serialization.common.FieldMetadata
|
||||
@@ -62,6 +63,7 @@ public class JsonReader {
|
||||
case "Float64" => return readFloat64(value)
|
||||
case "Float32" => return Float32(readFloat64(value))
|
||||
case "Rune" => return readChar(value)
|
||||
case "DateTime" | "std.time.DateTime" => return readDateTime(value)
|
||||
case _ => ()
|
||||
}
|
||||
|
||||
@@ -298,6 +300,15 @@ public class JsonReader {
|
||||
throw Exception("JsonSerializer: 无法转换为 Char")
|
||||
}
|
||||
|
||||
private static func readDateTime(v: JsonValue): DateTime {
|
||||
let s = readString(v)
|
||||
try {
|
||||
return DateTime.parse(s, "yyyy-MM-dd HH:mm:ss")
|
||||
} catch (_: Exception) {
|
||||
throw Exception("JsonSerializer: 无法转换为 DateTime: ${s}")
|
||||
}
|
||||
}
|
||||
|
||||
/// 生成某类型的占位默认值(用于构造 Option<X> 的 None:None 的参数槽类型是 X)。
|
||||
private static func defaultValueFor(typeName: String): Any {
|
||||
match (typeName) {
|
||||
@@ -314,6 +325,7 @@ public class JsonReader {
|
||||
case "Float64" => return Float64(0.0)
|
||||
case "Float32" => return Float32(0.0)
|
||||
case "Rune" => return Rune(0)
|
||||
case "DateTime" | "std.time.DateTime" => return DateTime.parse("1970-01-01 00:00:00", "yyyy-MM-dd HH:mm:ss")
|
||||
case _ => ()
|
||||
}
|
||||
// 集合/对象/枚举:反射无参构造;失败则抛异常
|
||||
|
||||
Reference in New Issue
Block a user