Выбрав пользовательский формат даты и времени при сериализации с Json.Net
Я занимаюсь разработкой API, чтобы разоблачить некоторые данные через веб ASP.NET API-интерфейс.
в одном из API клиент хочет, чтобы мы выставили дату в . Я не хочу изменять глобальные настройки (например GlobalConfiguration.Configuration.Formatters.JsonFormatter
) для этого, так как это очень специфично для этого клиента. И я разрабатываю это в решении для нескольких клиентов.
одно из решений, которое я мог бы придумать, это создать пользовательский JsonConverter
а затем поместите это в свойство мне нужно сделать обычай форматирование
например
class ReturnObjectA
{
[JsonConverter(typeof(CustomDateTimeConverter))]
public DateTime ReturnDate { get;set;}
}
просто интересно, есть ли какой-то другой простой способ сделать это.
5 ответов:
вы на правильном пути. Поскольку вы сказали, что не можете изменить глобальные настройки, то следующая лучшая вещь-применить
вы могли бы использовать этот подход:
public class DateFormatConverter : IsoDateTimeConverter { public DateFormatConverter(string format) { DateTimeFormat = format; } }
и использовать его таким образом:
class ReturnObjectA { [JsonConverter(typeof(DateFormatConverter), "yyyy-MM-dd")] public DateTime ReturnDate { get;set;} }
строка DateTimeFormat использует синтаксис строки формата .NET, описанный здесь: https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings
Это также может быть сделано с temp
IsoDateTimeConverter
экземпляр, без изменения глобальных параметров форматирования:string json = JsonConvert.SerializeObject(yourObject, new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" });
Это использует перегрузку, которая принимает
также доступно с помощью одной из настроек сериализатора перегрузки:
var json = JsonConvert.SerializeObject(someObject, new JsonSerializerSettings() { DateFormatString = "yyyy-MM-ddThh:mm:ssZ" });
или
var json = JsonConvert.SerializeObject(someObject, Formatting.Indented, new JsonSerializerSettings() { DateFormatString = "yyyy-MM-ddThh:mm:ssZ" });
перегрузки принимая тип также доступны.
построить вспомогательный класс и применить его к свойству атрибута
вспомогательный класс:
public class ESDateTimeConverter : IsoDateTimeConverter { public ESDateTimeConverter() { base.DateTimeFormat = "yyyy-MM-ddTHH:mm:ss.fffZ"; } }
ваш код использовать так:
[JsonConverter(typeof(ESDateTimeConverter))] public DateTime timestamp { get; set; }