使用 JsonConvert.DeserializeObject 反序列化 yyyyMMddTHHmmssZ 日期时间格式

Deserializing yyyyMMddTHHmmssZ DateTime format using JsonConvert.DeserializeObject

我有一个 JSON 和我使用 JsonConvert.DeserializeObject 反序列化的 DateTime 字段,它按预期工作,除非我使用 yyyyMMddTHHmmssZ DateTime 格式,这是一种ISO8601 种格式。

根据IsoDateTimeConverter的文档:

Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z").

那么为什么这个代码:

var serializeSettings=new JsonSerializerSettings();
serializeSettings.Converters.Add(new IsoDateTimeConverter());
var result= JsonConvert.DeserializeObject<EmployementHistory>(json,serializeSettings);

抛出以下异常:

{System.FormatException: String was not recognized as a valid DateTime. at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles) at Newtonsoft.Json.Converters.IsoDateTimeConverter.ReadJson(JsonReader reader, Type objectType, Object existingValue, JsonSerializer serializer)

我的模特:

public class EmployementHistory
{
    public string EmployeeName { get; set; }
    public DateTime PositionChangeDate { get; set; }
}

Json 示例:

{ "employeename":"Tom", "PositionChangeDate":"20180710T135034Z" }

根据 official documentationIsoDateTimeConverter 有一个名为 DateTimeFormat 的 public 属性,您可以在其中设置自己的格式 -
所以您需要做的就是提供格式:

var serializeSettings=new JsonSerializerSettings();
serializeSettings.Converters.Add(new IsoDateTimeConverter() {DateTimeFormat = "yyyyMMddTHHmmssZ"});
var result= JsonConvert.DeserializeObject<MyClass>(json,serializeSettings);