2016-07-08 14 views
7

Tôi đang sử dụng Newtonsoft.Json cho serializing ngày của tôi từ C# để javscript những gì tôi muốn làm là có serializer json sử dụng văn hóa hiện tại để định dạng ngày vào chuỗiNewtonsoft.Json tùy chỉnh serialize ngày

Đây là những gì tôi nhận được bởi serializer Json tôi:

JsonConvert.SerializeObject(DateTime.Now); 

kết quả là:

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

Nhưng những gì tôi thích là:

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

Vì văn hóa hiện tại của tôi là brazil và tôi muốn ngày của mình được hiển thị theo cách trên.

Có thể toàn cầu (đối với bất kỳ thời điểm đó có thể serialized) nói serializer json theo Newtonsoft.Json sử dụng như thể nó được làm date.ToString() (vì ToString tôn trọng văn hóa trong System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat và cung cấp cho các định dạng phù hợp theo đó)

+1

Bạn có thể thiết lập các [Cài đặt serializer global] (https://stackoverflow.com/questions/21815759/set-default-global-json-serializer-settings) để sử dụng một giá trị thread-tĩnh cho [ 'DateFormatString'] (http://www.newtonsoft.com/json/help/html/P_Newtonsoft_Json_JsonSerializerSettings_DateFormatString.htm). – dbc

+0

Bằng cách nào? Bạn có thể thử thêm một số mã không. Cấu hình cụ thể tôi nên thực hiện cho các ngày của tôi –

Trả lời

18

Bạn sẽ muốn đặt JsonSerializerSettings.DateFormatString thành định dạng mong muốn của mình.

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

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

Sau đó, bạn có thể vượt qua các thiết lập đối tượng trong mỗi lần bạn sử dụng serializer, hoặc làm theo các bước trong answer tham chiếu bởi dbc. Mặc dù, bạn không đề cập đến nơi này đang chạy (ASP.NET, máy tính để bàn, UWP, vv), vì vậy làm thế nào bạn thiết lập nó trên toàn cầu có thể khác nhau.

+0

Tôi đang sử dụng MVC6 để bạn biết nơi tôi có thể đặt mã để nó áp dụng cho tất cả json.I đặt nó trong cấu hình phương thức startup.cs nhưng nó không hoạt động. –

0

Có, bạn có thể sử dụng Trình chuyển đổi trong cài đặt 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()); 
Các vấn đề liên quan