Serialization 节点时间数据库json序列化

Serialization 节点时间数据库json序列化,serialization,nodatime,localtime,Serialization,Nodatime,Localtime,我正在postgres数据库的jsonb列中保存计划列表,并且我在LocalDateNodaTime类型方面遇到问题 这是我正在序列化的对象(实际上List已序列化并存储在数据库中) 这是存储在数据库中的内容 [ { "End": { "Hour": 10, "Minute": 0, "Second": 0, "TickOfDay": 360000000000,

我正在postgres数据库的jsonb列中保存计划列表,并且我在
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"}]