Я предложил другой подход, который может быть полезен для некоторых. По сути, я создаю свой собственный CustomDateConverter , который я вызываю, когда мне это нужно. Конвертер принимает 2 параметра, например формат даты. yyyy-MM-dd HH:mm:ss
и TimeZoneInfo, которая позволяет мне конвертировать дату из UTC в часовой пояс пользователя:
public class JSONCustomDateConverter : DateTimeConverterBase
{
private TimeZoneInfo _timeZoneInfo;
private string _dateFormat;
public JSONCustomDateConverter(string dateFormat, TimeZoneInfo timeZoneInfo)
{
_dateFormat = dateFormat;
_timeZoneInfo = timeZoneInfo;
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(DateTime);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(TimeZoneInfo.ConvertTimeFromUtc(Convert.ToDateTime(value), _timeZoneInfo).ToString(_dateFormat));
writer.Flush();
}
Вы можете использовать это так:
var jsonString = JsonConvert.SerializeObject(myObject, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, Converters = new List<JsonConverter>() { new JSONCustomDateConverter("yyyy-MM-dd HH:mm:ss", loggedUser.Timezone) } });
Очевидно, что вы можете удалить все, что связано с часовым поясом, если вы хотите только пользовательское форматирование даты. Дайте мне знать, что это помогло!