2012-05-10 35 views
5

Khi tôi quay trở lại đối tượng có chứa tài sản sử dụngASP.NET MVC Controller.Json DateTime serialization vs NewtonSoft Json DateTime serialization

return Json(value); 

trên client DateTime tôi nhận

"/Date(1336618438854)/" 

Nếu tôi trả về giá trị tương tự sử dụng

return Json(JsonConvert.SerializeObject(value)); 

sau đó giá trị được tuần tự được trả lại (cùng với đối tượng được tuần tự hóa) i s thời gian nhận thức:

"/Date(1336618438854-0400)/" 

Có cách nào để nhận được kết quả DateTime nhất quán mà không có sự tuần tự kép không? Tôi đọc ở đâu đó rằng MS sẽ bao gồm JSON Newton JSON vào MVC?

+0

bao giờ nghe nói về google? kết quả đầu tiên ... http://james.newtonking.com/archive/2009/02/20/good-date-times-with-json-net.aspx – MilkyWayJoe

+0

Hmm Google? Nghe có vẻ quen thuộc. Newton serialization đang hoạt động tốt. Câu hỏi là tại sao MVC bỏ qua múi giờ khi họ đã chấp nhận/Date()/format. – user1188755

+0

Chỉ cần sử dụng '$ .parseJSON (kết quả)' sẽ phân tích cú pháp đúng ngày. http://stackoverflow.com/a/4540007/752974 – Pete

Trả lời

-2

Nếu bạn không muốn đào sâu vào điều Phân tích cú pháp hơn là chỉ cần chuyển đổi ngày của bạn thành chuỗi hơn phân tích cú pháp bằng JSON.

ví dụ

return Json(DateTime.Now.ToString("your date format if you want to specify")); 
+0

Xin lỗi, nhưng bài đăng này không phải là về hiển thị ngày tháng.Đó là về tính nhất quán trong định dạng ngày được tuần tự hóa cho các đối tượng phức tạp có chứa các thuộc tính DateTime trong máy chủ đến máy khách và máy khách đến các kịch bản máy chủ. Và những gì bạn đang đề nghị tôi đang làm trong dòng thứ 2 với SerializeObject cho toàn bộ đối tượng. – user1188755

+0

@ user1188755 ... kiểm tra bên dưới http://stackoverflow.com/questions/668488/parsing-json-datetime-from-newtonsofts-json-serializer –

8

tôi cuối cùng đã tìm ra những việc cần làm.
Tôi sẽ chuyển dự án của mình sang định dạng DateTime ISO 8601. Việc tuần tự hóa được thực hiện độc đáo với JSON.net, chỉ bằng cách trang trí thuộc tính datetime trên đối tượng với thuộc tính JsonConverter.

public class ComplexObject 
    { 
     [JsonProperty] 
     public string ModifiedBy { get; set; } 
     [JsonProperty] 
     [JsonConverter(typeof(IsoDateTimeConverter))] 
     public DateTime Modified { get; set; } 
     ... 
    } 

Để trở về đối tượng serialized để cuộc gọi của khách hàng ajax tôi có thể làm:

return Json(JsonConvert.SerializeObject(complexObjectInstance)); 

và trên máy khách:

jsObject = JSON.parse(result) 

Bây giờ tôi đang suy nghĩ nó sẽ là lẽ đơn giản để ghi đè mặc định ASP.NET MVC mặc định JSON serializer cho chúng tôi Newtonsoft JSON.net ISO 8601 serialization, và có nguyên tắc nên được tương tự như chủ đề này: Change Default JSON Serializer Used In ASP MVC3.

+0

Câu trả lời hay nhưng tôi thấy rằng các thuộc tính Newtonsoft.Json là không cần thiết. Chỉ cần sử dụng '$ .parseJSON (kết quả)' sẽ phân tích cú pháp các ngày tháng một cách đúng đắn. http://stackoverflow.com/a/4540007/752974 – Pete

-2

Nó trả về Định dạng ngày máy chủ. Bạn cần phải xác định chức năng của riêng bạn.

function jsonDateFormat(jsonDate) { 

// Changed data format; 
return (new Date(parseInt(jsonDate.substr(6)))).format("mm-dd-yyyy/h:MM tt"); 

};

+1

'.format' là gì? –

0

Trong WebApiConfig thiết lập:

config.Formatters.Remove(config.Formatters.XmlFormatter); 
     //config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 
     config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json")); 
     config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 
     config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; 
     config.Formatters.JsonFormatter.SerializerSettings.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat; 

     config.MapHttpAttributeRoutes(); 

Trong ApiController trở lại này:

return Request.CreateResponse(HttpStatusCode.OK, obj); 

Good Luck CAhumada

Các vấn đề liên quan