问题描述
这是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-2020
和10:30:00 AM
。
我不能放置这样的通用转换器设置:
JsonConvert.DeserializeObject<T>(json,new
JsonSerializerSettings
{
DateFormatString = "yyyy-MM-dd" OR "THH:mm:ssZ"
});
因为我需要2种不同的格式类型。我该怎么做?
解决方法
在这种情况下,您可以这样做:
创建一个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<T>(json)
就可以正常工作。