代码之家  ›  专栏  ›  技术社区  ›  Yahya Hussein

使用jsonConvert.DeserializeObject反序列化yymmddthhmmssz日期时间格式

  •  0
  • Yahya Hussein  · 技术社区  · 7 年前

    我有一个带有日期时间字段的JSON,它使用 JsonConvert.DeserializeObject ,它按预期工作,除非我使用 yyyyMMddTHHmmssZ DateTime 格式,它是 ISO8601 格式。

    根据文件 IsoDateTimeConverter :

    将A转换为ISO 8601和从ISO 8601转换为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(字符串s, 日期时间格式信息DTFI,日期时间样式)在 newtonsoft.json.converters.isodateTimeConverter.readjson(jsonReader) 读卡器,类型ObjectType,对象existingValue,JSonserializer 序列化程序)

    我的模型:

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

    JSON示例:

    “employeename”:“tom”,“positionchangedate”:“20180710T135034Z”

    1 回复  |  直到 7 年前
        1
  •  2
  •   Yahya Hussein    7 年前

    根据 official documentation , the IsoDateTimeConverter 有一个公共财产 DateTimeFormat 您可以在其中设置自己的格式-
    所以你需要做的就是提供这种格式:

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