NodaTime数据库json序列化
NodaTime database json serialization
我在 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”。
Serialization/Deserialization 使用
完成
var converter = new ValueConverter<T, string>
(
v => JsonConvert.SerializeObject(v),
v => JsonConvert.DeserializeObject<T>(v) ?? null
);
我已经按照评论中的建议添加了 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"}]
我在 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”。
Serialization/Deserialization 使用
完成var converter = new ValueConverter<T, string>
(
v => JsonConvert.SerializeObject(v),
v => JsonConvert.DeserializeObject<T>(v) ?? null
);
我已经按照评论中的建议添加了 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"}]