将具有多种日期时间格式的 JSON 响应解析为 c# 对象

Parse JSON response with multiple datetime formats to c# object

这就是 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) returns {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 种不同的格式类型。我该如何实现?

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

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

在c#中class,

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<T>(json) 就可以正常工作了。