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

时间:2018-07-11 10:43:38

标签: c# json.net json-deserialization

我有一个带有DateTime字段的JSON,我使用JsonConvert.DeserializeObject反序列化,并且它按预期工作,除非我使用{{3}之一的yyyyMMddTHHmmssZ 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);

引发以下异常:

  

{System.FormatException:无法将字符串识别为有效字符串   约会时间。在System.DateTimeParse.Parse(String s,   DateTimeFormatInfo dtfi,DateTimeStyles样式)位于   Newtonsoft.Json.Converters.IsoDateTimeConverter.ReadJson(JsonReader   读取器,类型objectType,对象existValue,JsonSerializer   序列化器)

我的模特:

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

Json示例:

  

{“ employeename”:“ Tom”,“ PositionChangeDate”:“ 20180710T135034Z”}

1 个答案:

答案 0 :(得分:2)

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

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