将具有多种日期时间格式的 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-2020
和 10: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)
就可以正常工作了。
这就是 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-2020
和 10: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)
就可以正常工作了。