2016-07-08 66 views
7

我使用Newtonsoft.Json從C#序列化我的日期javscript我想要做的是有JSON序列使用當前區域性格式化日期到字符串Newtonsoft.Json定製連載日期

這裏是我得到通過我的JSON序列:

JsonConvert.SerializeObject(DateTime.Now); 

結果是:

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

但我更喜歡的是:

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

因爲我現在的文化是巴西,我希望我的日期以上述方式顯示。

是否有可能全球(對於可能被序列化任何日期)告訴在Newtonsoft.Json的JSON序列化,就好像它是做使用date.ToString()(因爲尊重的ToString在System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat文化,並給出了正確的格式相應地)

+1

您可以設置[全局串行設置](https://stackoverflow.com/questions/21815759/set-default-global-json-serializer-settings)使用一個線程靜態值的[ 'DateFormatString'](http://www.newtonsoft.com/json/help/html/P_Newtonsoft_Json_JsonSerializerSettings_DateFormatString.htm)。 – dbc

+0

如何?你可以嘗試添加一些代碼。什麼應該是我應該爲我的日期的具體配置 –

回答

18

你會想要將JsonSerializerSettings.DateFormatString設置爲你想要的格式。

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

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

之後,你可以通過設置,每次使用串行時間對象,或者遵循DBC引用在answer的步驟。雖然,你沒有提及它在哪裏運行(ASP.NET,桌面,UWP等),所以如何在全局範圍內設置它可能會有所不同。

+0

我使用MVC6你知道我可以放置代碼,以便它適用於所有json.I我把它放在startup.cs方法配置,但它不工作。 –

0

是的,你可以在JsonSerializer設置中使用Converter。

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());