我有一个带有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”}
答案 0 :(得分:2)
根据official documentation,IsoDateTimeConverter
具有一个名为DateTimeFormat
的公共属性,您可以在其中设置自己的格式-
因此,您所需要做的就是提供以下格式:
var serializeSettings=new JsonSerializerSettings();
serializeSettings.Converters.Add(new IsoDateTimeConverter() {DateTimeFormat = "yyyyMMddTHHmmssZ"});
var result= JsonConvert.DeserializeObject<MyClass>(json,serializeSettings);