2012-08-30 24 views
7

Làm cách nào để buộc DataContractJsonSerializer chấp nhận System.Json định dạng tuần tự hóa ngày giờ (ISO 8601)?Tuần tự hóa Json DateTime khác nhau trong DataContractJsonSerializer và System.Json

Vấn đề là đầu ra của System.Json "2012-03-01T16: 24: 55.000" nhưng định dạng DataContractJsonSerializer cần "/ Date (1329161615596 + 0200) /".

Tôi gặp lỗi này: Đã xảy ra lỗi khi deserializing đối tượng thuộc loại xyz. Nội dung ngày giờ '2012-03-01T16: 24: 55.000' không bắt đầu bằng '/ Ngày (' và kết thúc bằng ') /' theo yêu cầu cho JSON.

+1

Bạn không thể buộc nó chấp nhận bất kỳ điều gì, nhưng bạn có thể chuyển đổi nó để khớp với nó. –

+0

Tôi không có chuyên gia về điều này, nhưng tôi nghĩ rằng nó cũng có một cái gì đó để làm với chuyển đổi đến/từ thời gian Epoch. Tôi đã sai lầm với tương tự trước nhưng vì bạn không có mã và tôi đã không làm việc với hai lớp bạn đang đề cập, tôi không thể thực sự giúp đỡ nhiều hơn nữa nhưng tôi hy vọng điều này sẽ giúp bạn. –

+0

Cảm ơn bạn Aske. Bây giờ khi làm việc với System.Json tôi không còn sử dụng serializer mặc định nhưng tôi chuyển đổi DateTime thành "/ Date (" + EpochDateTime + ") /" string. Nó giải quyết vấn đề của tôi cho bây giờ tôi nghĩ. – akhansari

Trả lời

0

Bạn có thể viết một lớp bộ điều hợp xử lý trước dữ liệu tuần tự hóa của bạn trong quá trình deserialization, và plumbs tất cả các chức năng khác thông qua các lớp DataContractJsonSerializer kín.

public class DataContractSystemJsonSerializer : XmlObjectSerializer 
{ 

    protected DataContractJsonSerializer innerSerializer; 


    public DataContractSystemJsonSerializer(Type t) 
    { 
     this.innerSerializer = new DataContractJsonSerializer (t); 
    } 
    ... 

    public override Object ReadObject(Stream stream) 
    { 
     Object obj = null; 
     MemoryStream out = new MemoryStream(); 
     Byte[] buf = new Byte[64]; 
     stream.Read(buf,0,64); 

     int i = 0; 
     while(stream.Read(buf,i,1)) 
     { 
      convertDatesInBuffer(&buf, &i);    

      out.write(buf, i, 1); 

      i = (i+1)%64; 
     } 

     return innerSerializer.ReadObject(out); 
    } 

} 
+0

Cảm ơn kb0 nhưng bây giờ tôi sử dụng Json.NET ở khắp mọi nơi! – akhansari

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