2013-08-12 32 views
22

Tôi đang sử dụng JSON.NET để sắp xếp các giá trị DateTime trực tiếp từ các cá thể đối tượng (không sử dụng DateTime.ToString() với trình định dạng).Buộc JSON.NET bao gồm mili giây khi tuần tự hóa DateTime (ngay cả khi thành phần ms là 0)

Có cách nào để buộc JSON.NET bao gồm mili giây trong tuần tự hóa ngay cả khi thành phần mili giây của DateTime bằng không?

Thông tin cơ bản: Tôi có người dùng dịch vụ web rất chậm đối với điểm cuối JSON này. Logic có điều kiện là tốn kém cho người tiêu dùng, vì vậy tôi muốn cung cấp cùng một định dạng dữ liệu mỗi lần.

+1

có thể là một ý tưởng tốt để giải thích tập hợp các trường hợp dẫn bạn đến việc thực hiện điều này – spender

Trả lời

34

Chúng tôi đã gặp sự cố tương tự về dự án hiện tại của tôi. Chúng tôi đang sử dụng API Web (và do đó JSON.Net) để triển khai API REST. Chúng tôi phát hiện ra rằng, khi tuần tự hóa các đối tượng DateTime, JSON.Net bỏ qua các số không theo sau từ mili giây hoặc bỏ qua mili giây từ ngày hoàn toàn nếu nó bằng 0. Khách hàng của chúng tôi đã mong đợi một chuỗi ngày tháng cố định có độ dài cố định, với chính xác 3 chữ số trong mili giây. Chúng tôi cố định nó bằng cách làm như sau trong Application_Start():

JsonSerializerSettings settings = HttpConfiguration.Formatters.JsonFormatter.SerializerSettings; 
IsoDateTimeConverter dateConverter = new IsoDateTimeConverter 
{ 
    DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff'Z'" 
}; 
settings.Converters.Add(dateConverter); 

Nếu bạn không sử dụng Web API, bạn có thể làm điều tương tự bằng cách tạo ra một thể hiện mới của JsonSerializerSettings, thêm IsoDateTimeConverter đến nó như trình bày ở trên, sau đó chuyển cài đặt bộ nối tiếp đến JsonConvert.SerializeObject().

Lưu ý: Nếu bạn đang serializing một DateTimeOffset hoặc một địa phương DateTime và bạn muốn bao gồm múi giờ bù đắp, thay thế các trích dẫn 'Z' trong các định dạng trên với một thể viện chứng K. Xem Custom Date and Time Format Strings trong tài liệu để biết thêm thông tin.

+0

Cách tiếp cận của bạn với mã hiệu suất thực sự nằm ở khoảng 153ms để phân tích cú pháp. Có vẻ như hiệu suất là khá quan trọng, đó là lý do tại sao tôi mang nó lên. Họ nói rằng một người nhận thấy sự chậm trễ sau khoảng 200ms, vì vậy bạn chỉ còn lại khoảng 43ms để sử dụng mạng, truy cập cơ sở dữ liệu, v.v. –

+3

Câu trả lời của tôi chỉ đơn giản là cố gắng giải quyết câu hỏi của OP về cách lấy JSON.Net luôn bao gồm mili giây khi định dạng ngày. Nó không đưa ra yêu cầu về hiệu suất dưới bất kỳ hình thức nào. –

+0

Vâng, tôi chỉ thêm thông tin có thể giúp OP hoặc một người nào đó trên đường đi sau này. –