2012-08-30 34 views
7

如何強制DataContractJsonSerializer接受System.Json DateTime序列化格式(ISO 8601)?Json DateTime序列化在DataContractJsonSerializer和System.Json中是不同的

問題是System.Json輸出「2012-03-01T16:24:55.000」格式,但DataContractJsonSerializer需要「/ Date(1329161615596 + 0200)/」格式。

我有這個錯誤: 反序列化xyz類型的對象時出錯。根據JSON的要求,DateTime內容'2012-03-01T16:24:55.000'不以'/ Date('結尾並以')/'結尾。

+1

您不能強迫它接受任何內容,但可以將其轉換爲與之匹配。 –

+0

我不是這方面的專家,但我認爲它也與轉換/從大紀元時間有關。我之前曾經和類似的東西搞混了,但是因爲你沒有代碼,而且我沒有和你提到的兩個類一起工作,所以我不能再幫忙,但是我希望這可以幫助你。 –

+0

謝謝阿斯克。現在,當使用System.Json時,我不再使用默認序列化器,但是我將DateTime轉換爲「/ Date(」+ EpochDateTime +「)/」字符串。現在我認爲它解決了我的問題。 – akhansari

回答

0

您可以編寫一個適配器類,用於在反序列化過程中預處理序列化數據,並將所有其他函數通過密封的DataContractJsonSerializer類。

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

感謝kb0,但現在我到處使用Json.NET! – akhansari

相關問題