Есть ли способ указать пользовательскую десериализацию для сбора объектов, но только для дат?Newtonsoft.Json пользовательский набор объектов deserializer
Вот что я имею в виду:
Скажем, у меня есть коллекция предметов - это может быть любой объект и десериализации JSON их довольно хорошо. Все хорошо, а не даты.
public List<object> Values { get; set; }
Я не хочу устанавливать какие-либо свойства по всему миру - но только для этого свойства. Если в коллекции значений есть DateTime - я хочу десериализовать его по-своему (например, без времени).
Что вы можете мне предложить?
Глобально я использовать эти настройки:
var settings = new Newtonsoft.Json.JsonSerializerSettings()
{
DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat,
DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc
};
Использования:
К примеру у меня есть такая структура:
{
"Intance": 1,
"Values": [
"Ivan",
"488-555-1212",
"United States",
{
"ShortDesc": "NY",
"LongDesc": "New York"
},
"1985-05-01T00:00:00-05:00"
],
"LastUpdated": "2017-02-06T22:11:34-05:00"
}
Скажем - это дата рождения - «1985-05- 01T00: 00: 00-05: 00" . . Часовой пояс веб-служб - Восточное время: -5. Мой часовой пояс: Central Time (США): -6. В этом случае я получу: 1985-04-30 - День сзади. Это действительно так, но мне не нужно такое поведение. Свойство LastUpdated будет десериализоваться правильно.
Я бы сериализовать как 'DateTime' и либо (а) передать результат в метод конвертер/конструктор для вашего STRUCT/типа или (б) игнорировать временную часть DateTime, определяя собственное сравнение и используя операторы формата при его отображении. Почему вы хотите сериализовать его без времени? –
, например. это дата рождения ... Мне не нужна дата для этого. –
Это хороший вопрос. На самом деле я думал об этом раньше. Предположим, сервер возвращает время в UTC. Как я могу автоматически конвертировать его в локальное время на стороне клиента при десериализации JSON для объекта? – Reynevan