Я придумал другой подход, который может быть полезен для некоторых. В основном я создаю свой собственный 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) } });
Очевидно, вы можете удалить все, что связано с часовым поясом, если вам нужно только пользовательское форматирование даты. Дайте знать, что помогло!
person
Johann
schedule
15.08.2012