gpt4 book ai didi

json - Newtonsoft.json IsoDateTimeConverter 和 DateFormatHandling

转载 作者:行者123 更新时间:2023-12-01 23:29:05 27 4
gpt4 key购买 nike

这不是一个问题,而是一个概念,我只是想把它说清楚。使用 asp.net web api 时,我们使用 Newtonsoft.Json 的 SerializerSettings。在此设置中我们可以设置

jsonSetting.Converters.Add(new IsoDateTimeConverter());
jsonSetting.DateFormatHandling = DateFormatHandling.IsoDateFormat;

我了解IsoDateTimeConverter正在做什么,但不清楚DateFormatHandling.IsoDateFormat。如果您仍然使用IsoDateTimeConverterDateFormatHandling.MicrosoftDateFormat似乎没有任何效果。

仍然有一些了解这一点的解释。

最佳答案

您实际上有几个不同的相关问题。让我们把它们分解一下:

当我为 Json.NET native 支持的类型添加转换器时会发生什么?

如果您这样做,您的转换器将取代 native Json.NET 功能。例如,您可以 replace its serialization of byte [] fields 。或者您可以更改它序列化和反序列化数字的方式:这个有点愚蠢的转换器通过添加 1 来序列化整数:

public class IntConverter : JsonConverter
{
public override bool CanConvert(Type objectType) { return objectType == typeof(int); }

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return (int)JValue.Load(reader) - 1;
}

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(1 + (int)value);
}
}

为什么 Json.NET 提供各种 DateTime 转换器以及对多种 DateTime 格式的 native 支持?

文档Serializing Dates in JSON对此进行了解释

DateTimes in JSON are hard.

The problem comes from the JSON spec itself: there is no literal syntax for dates in JSON. The spec has objects, arrays, strings, integers, and floats, but it defines no standard for what a date looks like.

对日期的 native 支持可以处理一些常见的格式;如果您有其他格式的日期,您可以从 DateTimeConverterBase 派生。 (有关示例,请参见 How to convert new Date(year, month, day) overload with JSON.Net 。)完成此操作后,您的转换器将取代 DateFormatHandling 指定的 native 转换。 .

为什么 Json.NET 有一个类 IsoDateTimeConverter ,它似乎重复了 DateFormatHandling.IsoDateFormat 的功能?

这是一个遗留类。来自 Serializing Dates in JSON

From Json.NET 4.5 and onwards dates are written using the ISO 8601 format by default, and using this converter is unnecessary.

关于json - Newtonsoft.json IsoDateTimeConverter 和 DateFormatHandling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32138659/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com