2012-08-30 21 views
7

DataContractJsonSerializerSystem.Json DateTimeシリアル化形式(ISO 8601)を受け入れるにはどうすればよいですか?DataContractJsonSerializerとSystem.JsonでJson DateTimeのシリアル化が異なる

問題は、System.Jsonは "2012-03-01T16:24:55.000"という形式を出力しますが、DataContractJsonSerializerは "/ Date(1329161615596 + 0200)/"形式を必要とします。

私はこのエラーがあります: xyz型のオブジェクトを逆シリアル化する際にエラーが発生しました。 DateTimeのコンテンツ '2012-03-01T16:24:55.000'はJSONの必要に応じて '/ Date('で始まり、 '/'で終わる)で始まらない

+1

強制的に何も受け入れることはできませんが、それに合わせて変換することはできます。 –

+0

私はこれについて熟練していませんが、エポック時代への変換/エポック時代からの変換にも関係していると思います。前と同じように混乱しましたが、コードがなく、あなたが言及している2つのクラスに取り組んでいないので、これ以上の助けができませんが、これがあなたに役立つことを願っています。 –

+0

ありがとうございました。 System.Jsonで作業するとき、私はもはや既定のシリアライザを使用しませんが、DateTimeを "/ Date(" + EpochDateTime + ")/"文字列に変換します。今は私の問題を解決しています。 – akhansari

答えて

0

デシリアライズ時にシリアル化されたデータを前処理するアダプタクラスを作成し、他のすべての関数をsealed 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

関連する問題