Se me ocurrió un enfoque diferente que podría ser útil para algunos. Básicamente creo mi propio CustomDateConverter al que llamo cuando lo necesito. El convertidor toma 2 parámetros, un formato de fecha, p. yyyy-MM-dd HH:mm:ss
y una TimeZoneInfo, lo que me permite convertir la fecha de UTC a la zona horaria del usuario:
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();
}
Usted puede utilizar de esta manera:
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) } });
Obviamente usted podría quitar todo lo relacionado con la zona horaria si solo quieres formatear la fecha personalizada. ¡Déjame saber que ayudó!
hace este trabajo para usted ?: http://www.tek-tips.com/viewthread.cfm?qid=1526126&page=8 – bernie