#c# #json #.net #json-deserialization
#c# #json #.net #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)
:
Доступный отель находится на другом месте | Доступное время находится в другом месте |
---|---|
9/10/2020 12:00:00 УТРА | 9/11/2020 10:30:00 УТРА |
Мой ожидаемый результат:
Доступный отель находится на другом месте | Доступное время находится в другом месте |
---|---|
9/10/2020 | 10:30:00 УТРА |
Я не могу установить общие настройки конвертера, подобные этому:
JsonConvert.DeserializeObject<T>(json, new
JsonSerializerSettings
{
DateFormatString = "yyyy-MM-dd" OR "THH:mm:ssZ"
});
потому что мне нужны 2 разных типа формата даты и времени. Как мне этого добиться?
Ответ №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<T>(json)
будет работать просто отлично.