使用 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 documentation,IsoDateTimeConverter
有一个名为 DateTimeFormat
的 public 属性,您可以在其中设置自己的格式 -
所以您需要做的就是提供格式:
var serializeSettings=new JsonSerializerSettings();
serializeSettings.Converters.Add(new IsoDateTimeConverter() {DateTimeFormat = "yyyyMMddTHHmmssZ"});
var result= JsonConvert.DeserializeObject<MyClass>(json,serializeSettings);
我有一个 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 documentation,IsoDateTimeConverter
有一个名为 DateTimeFormat
的 public 属性,您可以在其中设置自己的格式 -
所以您需要做的就是提供格式:
var serializeSettings=new JsonSerializerSettings();
serializeSettings.Converters.Add(new IsoDateTimeConverter() {DateTimeFormat = "yyyyMMddTHHmmssZ"});
var result= JsonConvert.DeserializeObject<MyClass>(json,serializeSettings);