2014-04-28 27 views
1

我訪問的TomTom JSON API,並且所述API或者返回我對象的數組,或一個單一的對象,當一個錯誤已發生。DataContractJsonSerializer:序列化對象或陣列(可以是兩者)

實施例:

[{"driverno": "... 

錯誤示例:

{"errorCode": "8011","errorMsg": "request quota reached, error code: 8011"} 

該數據被存取的WebRequest,WebResponse類和它們返回流,其然後可以被傳遞到一個DataContractJsonSerializer。但是,我無法創建一個序列化類,它接受兩種形式的JSON,並且流不能傳遞兩次,因爲seek函數不受支持。

有沒有一種方法,創造它支持兩種類型的JSON輸入的序列化類?

回答

0

我找到了一個解決方法,在這裏我的Stream複製到MemoryStream,這使得能夠尋求。我並不完全滿意這個解決方案,因爲它做了一個流式複製和兩次。

樣品:

string text = File.ReadAllText(PAHT); 
text = Regex.Replace(text, "\\{[\\n\\r ]*\"__type", "{\"__type"); 

// copy to MemoryStream 
using (MemoryStream dataStream = new MemoryStream(Encoding.UTF8.GetBytes(text))) 
{ 
    DataContractJsonSerializer errorDeserializer = new DataContractJsonSerializer(typeof(RequestError)); 
    RequestError errorSerilaized = (RequestError)errorDeserializer.ReadObject(dataStream); 

    // check if an error happened 
    if (errorSerilaized.errorCode == null) 
    { 
     // seek the stream to position 0 
     dataStream.Position = 0; 

     DataContractJsonSerializer _deserializer = new DataContractJsonSerializer(typeof(NoneErrorSerializationClass)); 
     NoneErrorSerializationClass tripReportsSerialized = (NoneErrorSerializationClass)_deserializer.ReadObject(dataStream); 

     // ... 
    } 
    else 
    { 
     MessageBox.Show(errorSerilaized.errorMsg); 
    } 
} 
相關問題