首页 新闻 会员 周边

System.Text.Json 反序列化时间的问题

0
悬赏园豆:50 [已解决问题] 解决于 2021-12-27 10:56

下面的 .NET 6 C# 代码,运行时会报错

var json = System.Text.Json.JsonSerializer.Serialize(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine(json);
var dt = System.Text.Json.JsonSerializer.Deserialize<DateTime>(json);
Console.WriteLine(dt);

报错信息

System.Text.Json.JsonException: The JSON value could not be converted to System.DateTime. Path: $ | LineNumber: 0 | BytePositionInLine: 21.
 ---> System.FormatException: The JSON value is not in a supported DateTime format.

请问如何解决?

dudu的主页 dudu | 高人七级 | 园豆:30994
提问于:2021-12-06 18:28
< >
分享
最佳答案
0

通过下面的自定义 DateTimeJsonConverter 解决了

public class DateTimeJsonConverter : JsonConverter<DateTime>
{
    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    => DateTime.Parse(reader.GetString() ?? string.Empty);

    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
    => writer.WriteStringValue(value.ToString("o"));
}

反序列化示例代码

var dt = JsonSerializer.Deserialize<DateTime>(
    "\"04/01/2018 09:51:00\"",
    new JsonSerializerOptions { Converters = { new DateTimeJsonConverter() } });
dudu | 高人七级 |园豆:30994 | 2021-12-27 10:55
其他回答(4)
0

要么用System.Runtime.Serialization.Formatters.Binarry这个名称空间的BinarryFormatter类,这个不是json。如果硬要json的话,得用非常好的开源库Newtonsoft.Json

收获园豆:10
寂静的羽夏 | 园豆:1803 (小虾三级) | 2021-12-06 19:27
0

为什么你要这样用json啊,json至少要有个键和值吧,你这个直接把日期转成字符串,再把一个字符串转成日期,这样应该是不行的吧,还是说就有这么个用法。。。

收获园豆:10
WmW | 园豆:424 (菜鸟二级) | 2021-12-07 09:21

这只是示例代码,实际是 Newtonsoft.Json 序列化出来的 json

支持(0) 反对(1) dudu | 园豆:30994 (高人七级) | 2021-12-07 10:04
0

var str = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
var dt =Convert.ToDateTime(str );

收获园豆:10
diudiu1 | 园豆:1031 (小虾三级) | 2021-12-07 09:27
1

System.Text.Json 时间是认标准的. yyyy-MM-ddTHH:mm:ss 中间得有个T

收获园豆:20
huiyuanai709 | 园豆:487 (菜鸟二级) | 2021-12-17 22:08

是的

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2021-12-17 22:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册