简体   繁体   English

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

[英]Parse JSON response with multiple datetime formats to c# object

This is what the JSON response is:这是 JSON 响应:

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

A simple JsonConvert.DeserializeObject<T>(json) returns {9/10/2020 12:00:00 AM} for availableDateLocalToSomeplace and {9/11/2020 10:30:00 AM} for availableTimeLocalToSomeplace .一个简单的JsonConvert.DeserializeObject<T>(json)返回{9/10/2020 12:00:00 AM}availableDateLocalToSomeplace{9/11/2020 10:30:00 AM}availableTimeLocalToSomeplace I only want 9-10-2020 and 10:30:00 AM respectively.我只需要9-10-202010:30:00 AM I can't put a generic converter settings like this:我不能像这样放置通用转换器设置:

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

because I need 2 different format types.因为我需要 2 种不同的格式类型。 How do I accomplish this?我该如何实现?

In this case you can do like this: Create a CustomDateTimeConverter class, and pass the format to it's constructor, like so在这种情况下,您可以这样做:创建一个CustomDateTimeConverter类,并将格式传递给它的构造函数,就像这样

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

In the c# class,在 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; }
}

Now your simple JsonConvert.DeserializeObject<T>(json) will work just fine.现在你简单的JsonConvert.DeserializeObject<T>(json)就可以正常工作了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM