NodaTime数据库json序列化

问题描述 投票:0回答:1

我将日程表列表保存在postgres数据库的jsonb列中,并且LocalDate NodaTime类型出现问题。

这里是我要序列化的对象(实际上是List<Schedule>已序列化并存储在数据库中]

public class Schedule
{
    public LocalTime? Start { get; set; }
    public LocalTime? End { get; set; }
}

这是存储在数据库中的内容

[
    {
        "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
);
serialization nodatime localtime
1个回答
1
投票

我按照注释中的建议添加了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
);

现在可以正确序列化为字符串并成功反序列化。

[{"End": "10:00:00", "Start": "09:00:00"}]
© www.soinside.com 2019 - 2024. All rights reserved.