使用 JsonConvert.DeserializeObject 反序列化 yyyyMMddTHHmmssZ DateTime 格式

Yah*_*ein 2 c# json.net json-deserialization

我有一个带有 DateTime 字段的 JSON,我使用它进行反序列化JsonConvert.DeserializeObject,并且它按预期工作,除非我使用ISO8601yyyyMMddTHHmmssZ DateTime格式之一的格式。

根据以下文件IsoDateTimeConverter

将 a 与 ISO 8601 日期格式相互转换(例如“2008-04-12T12:53Z”)。

那么为什么这段代码:

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

抛出以下异常:

{System.FormatException:字符串未被识别为有效的日期时间。在System.DateTimeParse.Parse(String s,DateTimeFormatInfo dtfi,DateTimeStyles样式)在Newtonsoft.Json.Converters.IsoDateTimeConverter.ReadJson(JsonReader阅读器,类型objectType,对象existingValue,JsonSerializer序列化器)

我的型号:

public class EmployementHistory
{
    public string EmployeeName { get; set; }
    public DateTime PositionChangeDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

json示例:

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

Zoh*_*led 5

根据官方文档IsoDateTimeConverter有一个名为的公共属性,DateTimeFormat您可以在其中设置自己的格式 -
因此您需要做的就是提供该格式:

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