您实际上有几个不同的相关问题。让我们把它们分解一下:
当我为 Json.NET 本机支持的类型添加转换器时会发生什么?
如果你这样做,你的转换器取代原生 Json.NET 功能。例如,您可以替换其序列化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 中序列化日期
JSON 中的日期时间很难。
问题来自 JSON 规范本身:JSON 中没有日期的文字语法。该规范包含对象、数组、字符串、整数和浮点数,但它没有定义日期的标准。
对日期的本机支持可以处理一些常见的格式;如果您有其他格式的日期,您可以从中得出DateTimeConverterBase。 (例如,请参见如何使用 JSON.Net 转换新的日期(年、月、日)重载。)完成此操作后,您的转换器将取代由DateFormatHandling.
为什么Json.NET有一个类IsoDateTimeConverter
这似乎重复了功能DateFormatHandling.IsoDateFormat
?
这是一个遗留类。从在 JSON 中序列化日期
从 Json.NET 4.5 及更高版本开始,默认情况下使用 ISO 8601 格式写入日期,无需使用此转换器。