J'ai trouvé une approche différente qui pourrait être utile pour certains. Fondamentalement, je crée mon propre CustomDateConverter que j'appelle quand j'en ai besoin. Le convertisseur prend 2 paramètres, un format de date par exemple yyyy-MM-dd HH:mm:ss
et un TimeZoneInfo, ce qui me permet de convertir la date de UTC au fuseau horaire de l'utilisateur:
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();
}
Vous pouvez l'utiliser comme ceci:
var jsonString = JsonConvert.SerializeObject(myObject, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, Converters = new List() { new JSONCustomDateConverter("yyyy-MM-dd HH:mm:ss", loggedUser.Timezone) } });
Évidemment, vous pourriez supprimer tout ce qui est lié au fuseau horaire si vous ne voulez que personnaliser le format de date. Faites-moi savoir si cela vous a aidé!
0 votes
Est-ce que cela fonctionne pour vous?: tek-tips.com/viewthread.cfm?qid=1526126&page=8