2012-10-17 32 views
18

Tất cả,Định dạng ngày ASP.NET Web API trong JSON không nối tiếp thành công

Chúng tôi đang sử dụng ASP.NET Web API nơi chúng tôi có dịch vụ dựa trên REST với JSON cho tải trọng. Nếu tôi chuyển Ngày sau dưới dạng chuỗi, ví dụ:

sampleObj: { 
... 
myDate: "31/12/2011 00:00:00", 
... 
} 

làm giá trị thuộc tính trong tải trọng JSON, thuộc tính ngày được deserialised thành DateTime.MinValue. Định dạng chuỗi có hợp lệ không?

Chúng tôi biết định dạng "2012-10-17 07:45:00" hàng loạt thành công nhưng chúng tôi không thể đảm bảo rằng tất cả các ngày nhận được sẽ ở định dạng này. Các tùy chọn hợp lệ là gì?

Trả lời

46

Trong ASP.NET Web API, bạn có thể thêm các Json.NET DateTimeConverters khác nhau thông qua các SerializerSettings của JsonFormatter để làm cho dịch vụ của bạn hiểu định dạng DateTime khác nhau.

Tuy nhiên, tôi không nghĩ rằng có một DateTimeConverter mặc định từ Json.NET có định dạng này "31/12/2011 00:00:00". Trong trường hợp này, bạn triển khai DateTimeConverter tùy chỉnh của mình.

WebApiConfig.cs:

 config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
      new IsoDateTimeConverter()); 
     config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
      new MyDateTimeConverter()); 

Tuỳ chỉnh DateTimeConverter:

public class MyDateTimeConverter : DateTimeConverterBase 
{ 
    //... 
} 

Để biết thêm thông tin về làm thế nào để viết một DateTimeConverter tùy chỉnh, tôi thấy một cái gì đó trên stackoverflow mà bạn có thể tìm thấy hữu ích: How to create a json.net Date to String custom Converter.

+0

Nhờ sự giúp đỡ đó. Chúng tôi sẽ không tạo bộ chuyển đổi thời gian theo ngày tùy chỉnh, tôi chỉ muốn xác nhận rằng định dạng không được chấp nhận bởi Json.NET theo mặc định. – bstack

+1

U đã tiết kiệm thời gian của tôi. cảm ơn –

3

Chỉ cần đặt toàn cầu hóa trong web.config:

<globalization enableClientBasedCulture="false" requestEncoding="utf-8" responseEncoding="utf-8" culture="en-GB" uiCulture="en-GB"/> 

và sau đó, trong Global.asax.cs> Application_Start, thiết JsonFormatter sử dụng văn hóa hiện tại:

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; 
json.SerializerSettings.Culture = System.Globalization.CultureInfo.CurrentCulture; 
Các vấn đề liên quan