2016-07-08 43 views
7

Sto usando Newtonsoft.Json per la serializzazione mie date da C# per javscript quello che voglio fare è avere il serializzatore JSON utilizzare la cultura corrente per la formattazione date in stringaNewtonsoft.Json personalizzare serializzare Date

Ecco quello che sto ottenendo dal mio serializzatore JSON:

JsonConvert.SerializeObject(DateTime.Now); 

risultato è:

"2016-07-08T17:10:17.6722753-05:00" 

Ma quello che preferisco è:

"08/07/2016 17:10:57" 

Perché la mia cultura attuale è il Brasile e voglio che le mie date vengano visualizzate come sopra.

E 'possibile globale (per qualsiasi data che potrebbe essere serializzato) dire al serializzatore JSON in Newtonsoft.Json da utilizzare come se si sta facendo la date.ToString() (perché ToString rispetta la cultura in System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat e dà il formato giusto di conseguenza)

+1

È possibile impostare la [Impostazioni globali serializzatore] (https://stackoverflow.com/questions/21815759/set-default-global-json-serializer-settings) per utilizzare un valore thread-statico per il [ 'DateFormatString'] (http://www.newtonsoft.com/json/help/html/P_Newtonsoft_Json_JsonSerializerSettings_DateFormatString.htm). – dbc

+0

Come? Puoi provare ad aggiungere del codice. Quale dovrebbe essere la configurazione specifica che dovrei fare per le mie date –

risposta

18

Si desidera impostare JsonSerializerSettings.DateFormatString nel formato desiderato.

var jsonSettings = new JsonSerializerSettings(); 
jsonSettings.DateFormatString = "dd/MM/yyy hh:mm:ss"; 

string json = JsonConvert.SerializeObject(someObject, jsonSettings); 

Dopo di che, è possibile passare le impostazioni oggetto in ogni volta che si utilizza il serializzatore, o seguire i passaggi della answer fa riferimento DBC. Anche se non si indica dove è in esecuzione (ASP.NET, desktop, UWP, ecc.), Quindi il modo in cui lo si imposta a livello globale può essere diverso.

+0

Sto usando MVC6 sai dove posso posizionare il codice in modo che si applichi a tutti json.Io lo metto nel metodo startup.cs configure ma non funziona. –

0

Sì, è possibile utilizzare un convertitore nelle impostazioni di JsonSerializer.

public class SpecialDateTimeConverter : DateTimeConverterBase 
    { 
     public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
     { 
      throw new NotImplementedException(); 
     } 

     public override void WriteJson(JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer) 
     { 
      writer.WriteValue(((DateTime)value).ToString("dd/MM/yyyy hh:mm:ss")); 
     } 
    } 

    string convertedDateTime = JsonConvert.SerializeObject(DateTime.Now, Formatting.Indented, new SpecialDateTimeConverter());