2012-02-21 34 views
5

Tôi sử dụng Fiddler để kiểm tra phần còn lại WCF của tôi. Tôi luôn luôn có đượcLàm thế nào để vượt qua giá trị TimeSpan ở định dạng JSON?

HTTP/1.1 400 Bad Request 

với bài giá trị này:

{ 
    "session":{ 
     "Session":"088a688d-ea69-4264-9266-381e9e540d00", 
     "LoginID":"testid", 
     "Serial":"testserial" 
    }, 
    "sub":[ 
     { 
      "Type":0, 
      "StartDate":"\/Date(1319731200000+0800)\/", 
      "EndDate":"\/Date(1319731200000+0800)\/", 
      "Duration":"12:12:12" 
     } 
    ] 
} 

tôi nhận được lỗi trong giá trị 'Thời gian'. Tôi đã tìm kiếm trên mạng nhưng không may mắn chút nào.
Tôi hy vọng tôi sẽ tìm thấy câu trả lời ở đây. Cảm ơn rất nhiều!

+0

Bạn đang sử dụng mã nào để phân tích cú pháp dữ liệu đó? (Các chuỗi dấu chéo ngược/chuyển tiếp-cắt cũng có mùi.) –

+0

Tôi sử dụng, RequestFormat = WebMessageFormat.Json, nhưng tôi chắc chắn rằng không có vấn đề với StartDate và EndDate, tôi đã thử nghiệm nó nhiều lần. – fiberOptics

+0

BTW, tôi đã cố truy xuất dữ liệu và tôi thấy rằng thời lượng có loại giá trị này, "Thời lượng": PT20H8M, giá trị TimeSpan: 20:08:00, bạn có quen thuộc với điều này không? Cảm ơn – fiberOptics

Trả lời

4

Cách tiếp cận đơn giản là phân tích cú pháp timepan thành chuỗi và chuyển đổi thành một TimeSpan bằng cách sử dụng thường trình 'phân tích cú pháp' tĩnh của nó. Với JSON và WCF bạn đang dựa vào JSON Serialiser để chuyển đổi đối tượng qua lại, thật không may khi bạn bắt đầu 'di chuyển' ra khỏi các kiểu đối tượng gốc, tức là chuỗi, số, và thành đối tượng cụ thể, nó có xu hướng bị nghẹt thở trừ khi bạn sử dụng định dạng chính xác.

Cá nhân, tôi đã không có kinh nghiệm truyền Khoảng thời gian qua các DataContractJsonSerializer gì định dạng là cần thiết, tuy nhiên this post sẽ làm nổi bật các định dạng chính xác cùng với việc nó có thể

+0

Cảm ơn bạn đã giải thích tốt. Thực ra tôi sắp chuyển đổi chúng thành chuỗi rồi phân tích dữ liệu sau này. Nhưng tôi vẫn hy vọng tìm ra cách dễ nhất. – fiberOptics

-1

loại NET của "tiểu" là gì ? Nó trông giống như một bộ sưu tập hoặc loại mảng của một số loại; loại .NET mong đợi những yếu tố đó là gì? Loại đó có các thuộc tính Type, StartDate, EndDate và Duration không? Liệu nó có bất kỳ thuộc tính nào khác được đánh dấu bằng [IsRequiredAttribute] nhưng không có?

Nếu bạn tạo một DataContractJsonSerializer mới (loại = TimeSpan), và cố gắng deserialize chỉ chuỗi "12:12:12", những gì xảy ra sau đó?

Tôi chưa cung cấp cho bạn câu trả lời - nhưng tôi nghĩ rằng các bài tập này không nên giải quyết vấn đề của bạn ngay bây giờ, nhưng nó cũng sẽ giúp chẩn đoán các lỗi trong tương lai bạn có thể gặp phải trong quá trình deserialization chuỗi này.

Xem thêm Deserialize array values to .NET properties using DataContractJsonSerializer đối với một số con trỏ

+0

Cảm ơn, nhưng tôi đã thử nghiệm nó nhiều lần và chắc chắn không có vấn đề với các thuộc tính và giá trị EXCEPT giá trị "Thời gian" là một loại TimeSpan (cho tôi nghĩ) Json không thể tuần tự hóa. – fiberOptics

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