Tôi đã đưa ra một cách tiếp cận khác có thể hữu ích đối với một số người. Về cơ bản tôi tạo CustomDateConverter mà tôi gọi khi tôi cần. Trình biến đổi có 2 tham số, định dạng ngày, ví dụ: yyyy-MM-dd HH:mm:ss
và TimeZoneInfo, cho phép tôi để chuyển đổi ngày từ UTC tới múi giờ của người dùng:
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();
}
Bạn có thể sử dụng nó như thế này:
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) } });
Rõ ràng, bạn có thể loại bỏ bất cứ điều gì liên quan đến múi giờ nếu bạn chỉ muốn định dạng ngày tùy chỉnh. Hãy cho tôi biết điều đó đã giúp!
Liệu tác phẩm này với bạn ?: http://www.tek-tips.com/viewthread.cfm?qid=1526126&page=8 – bernie