【问题标题】:Parse JSON response with multiple datetime formats to c# object将具有多种日期时间格式的 JSON 响应解析为 c# 对象
【发布时间】:2020-09-11 14:57:29
【问题描述】:

这是 JSON 响应的内容:

{
  "data": [
    {
      "someTicketNumber": "123456",
      "callInDateTimeUtc": "2020-09-09T20:16:26Z",
      "lastUpdatedDateTimeUtc": "2020-09-09T20:28:11Z",
      "availableDateLocalToSomeplace": "2020-09-10",
      "availableTimeLocalToSomeplace": "T10:30:00Z"
    }
  ]
}

一个简单的JsonConvert.DeserializeObject<T>(json) 返回{9/10/2020 12:00:00 AM} 对应availableDateLocalToSomeplace{9/11/2020 10:30:00 AM} 对应availableTimeLocalToSomeplace。我只想要9-10-202010:30:00 AM 分别。 我不能像这样放置通用转换器设置:

JsonConvert.DeserializeObject<T>(json, new 
JsonSerializerSettings
{
    DateFormatString = "yyyy-MM-dd" OR "THH:mm:ssZ"
});

因为我需要 2 种不同的格式类型。我该如何做到这一点?

【问题讨论】:

    标签: c# json .net json-deserialization


    【解决方案1】:

    在这种情况下,您可以这样做: 创建一个CustomDateTimeConverter 类,并将格式传递给它的构造函数,就像这样

    public class DateFormatConverter : IsoDateTimeConverter
    {
        public DateFormatConverter(string format)
        {
            DateTimeFormat = format;
        }
    }
    

    在c#类中,

    public partial class Tickets
    {
        [JsonProperty("data")]
        public TicketProps[] Data { get; set; }
    }
    
    public partial class TicketProps
    {
        [JsonProperty("someTicketNumber")]
        public string SomeTicketNumber { get; set; }
    
        [JsonProperty("callInDateTimeUtc")]
        [JsonConverter(typeof(DateFormatConverter), "yyyy-MM-ddTHH:mm:ssZ")]
        public DateTime? CallInDateTimeUtc { get; set; }
    
        [JsonProperty("lastUpdatedDateTimeUtc")]
        [JsonConverter(typeof(DateFormatConverter), "yyyy-MM-ddTHH:mm:ssZ")]
        public DateTime? LastUpdatedDateTimeUtc { get; set; }
    
        [JsonProperty("availableDateLocalToSomeplace")]
        [JsonConverter(typeof(DateFormatConverter), "yyyy-MM-dd")]
        public DateTime?AvailableDateLocalToSomeplace { get; set; }
    
        [JsonProperty("availableTimeLocalToSomeplace")]
        [JsonConverter(typeof(DateFormatConverter), "THH:mm:ssZ")]
        public DateTime? AvailableTimeLocalToSomeplace { get; set; }
    }
    

    现在您的简单 JsonConvert.DeserializeObject&lt;T&gt;(json) 可以正常工作了。

    【讨论】:

      猜你喜欢
      • 2020-07-04
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多