一种方法是组合设置DateParseHandling以不转换DateTime字符串,然后为DateTime设置一个自定义JsonConverter
一个非常简单的Datetime转换器,如果不是UTC Datetime,它会崩溃
public class DateTimeConverter : JsonConverter<DateTime>
{
public override void WriteJson(JsonWriter writer, DateTime value, JsonSerializer serializer)
{
writer.WriteValue(value.ToString("u"));
}
public override DateTime ReadJson(JsonReader reader, Type objectType, DateTime existingValue, bool hasExistingValue, JsonSerializer serializer)
{
string s = (string)reader.Value;
return DateTime.ParseExact(s,"u", CultureInfo.InvariantCulture);
}
}
那么反序列化代码如下所示:
var settings = new JsonSerializerSettings()
{
DateParseHandling = DateParseHandling.None,
Converters = new List<JsonConverter>()
{
new DateTimeConverter()
}
};
var deserialized = JsonConvert.DeserializeObject<MyDate>(json, settings);