下面的 .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.
请问如何解决?
通过下面的自定义 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() } });
要么用System.Runtime.Serialization.Formatters.Binarry
这个名称空间的BinarryFormatter
类,这个不是json
。如果硬要json
的话,得用非常好的开源库Newtonsoft.Json
为什么你要这样用json啊,json至少要有个键和值吧,你这个直接把日期转成字符串,再把一个字符串转成日期,这样应该是不行的吧,还是说就有这么个用法。。。
这只是示例代码,实际是 Newtonsoft.Json 序列化出来的 json
var str = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
var dt =Convert.ToDateTime(str );
System.Text.Json 时间是认标准的. yyyy-MM-ddTHH:mm:ss 中间得有个T
是的