Serialization 节点时间数据库json序列化
我正在postgres数据库的jsonb列中保存计划列表,并且我在Serialization 节点时间数据库json序列化,serialization,nodatime,localtime,Serialization,Nodatime,Localtime,我正在postgres数据库的jsonb列中保存计划列表,并且我在LocalDateNodaTime类型方面遇到问题 这是我正在序列化的对象(实际上List已序列化并存储在数据库中) 这是存储在数据库中的内容 [ { "End": { "Hour": 10, "Minute": 0, "Second": 0, "TickOfDay": 360000000000,
LocalDate
NodaTime类型方面遇到问题
这是我正在序列化的对象(实际上List
已序列化并存储在数据库中)
这是存储在数据库中的内容
[
{
"End": {
"Hour": 10,
"Minute": 0,
"Second": 0,
"TickOfDay": 360000000000,
"Millisecond": 0,
"TickOfSecond": 0,
"NanosecondOfDay": 36000000000000,
"ClockHourOfHalfDay": 10,
"NanosecondOfSecond": 0
},
"Start": {
"Hour": 8,
"Minute": 0,
"Second": 0,
"TickOfDay": 288000000000,
"Millisecond": 0,
"TickOfSecond": 0,
"NanosecondOfDay": 28800000000000,
"ClockHourOfHalfDay": 8,
"NanosecondOfSecond": 0
}
}
]
这对我来说似乎很好,但问题是当我从数据库获取数据时,我的LocalDate是'00:00:00'
序列化/反序列化是使用
var converter = new ValueConverter<T, string>
(
v => JsonConvert.SerializeObject(v),
v => JsonConvert.DeserializeObject<T>(v) ?? null
);
var转换器=新值转换器
(
v=>JsonConvert.SerializeObject(v),
v=>JsonConvert.DeserializeObject(v)??空
);
我按照注释中的建议添加了NodaTime.Serialization.JsonNet
,并将Entity Framework的转换器更改为:
var converter = new ValueConverter<T, string>
(
v => JsonConvert.SerializeObject(v, NodaConverters.LocalTimeConverter),
v => JsonConvert.DeserializeObject<T>(v, NodaConverters.LocalTimeConverter) ?? null
);
看起来您只是在使用默认序列化,这在反序列化为不可变值类型时会遇到困难。看起来您可能正在使用Json.NET,所以请使用
NodaTime.Serialization.JsonNet
库执行适当的序列化和反序列化。(这也将使存储的数据更具可读性…)完全正确!不知道为什么我认为“整个对象”序列化是正确的,一旦我从NodaTime.serialization.JsonNet
添加了jsonvert.serialized对象(r,NodaConverters.LocalTimeConverter)
,它就被序列化为字符串并正确地反序列化。谢谢@JonSkeet,我们将结束此问题。
var converter = new ValueConverter<T, string>
(
v => JsonConvert.SerializeObject(v, NodaConverters.LocalTimeConverter),
v => JsonConvert.DeserializeObject<T>(v, NodaConverters.LocalTimeConverter) ?? null
);
[{"End": "10:00:00", "Start": "09:00:00"}]