这不是问题,而是我想说清楚的概念。 使用asp.net web api时,我们使用Newtonsoft.Json的 SerializerSettings 。在此设置中,我们可以设置
jsonSetting.Converters.Add(new IsoDateTimeConverter());
jsonSetting.DateFormatHandling = DateFormatHandling.IsoDateFormat;
我理解 IsoDateTimeConverter 正在做什么,但不清楚 DateFormatHandling.IsoDateFormat 。如果你仍然使用 IsoDateTimeConverter ,似乎没有 DateFormatHandling.MicrosoftDateFormat 的影响。
除了一些了解此事的解释之外。
答案 0 :(得分:3)
你实际上有几个不同的相关问题。让我们分解它们:
当我为Json.NET本机支持的类型添加转换器时会发生什么?
如果您这样做,您的转换器将取代本机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
格式的原生支持?
JSON中的DateTimes很难。
问题来自JSON规范本身:JSON中没有日期的文字语法。规范包含对象,数组,字符串,整数和浮点数,但它没有为日期定义标准。
对日期的本机支持处理一些常见的格式;如果您有其他格式的日期,则可以从DateTimeConverterBase
派生。 (有关示例,请参阅How to convert new Date(year, month, day) overload with JSON.Net。)完成此操作后,您的转换器将取代DateFormatHandling
指定的本机转换。
为什么Json.NET的类IsoDateTimeConverter
似乎与DateFormatHandling.IsoDateFormat
的功能重复?
这是一个遗留类。来自Serializing Dates in JSON
从Json.NET 4.5开始,默认情况下使用ISO 8601格式编写日期,并且不需要使用此转换器。