2012-07-26 55 views
0

我們的框架建立起來的,其API是這樣的:.NET反序列化 - 返回多種類型

T Deserialize<T>(string to deserialize) 
{ 
    // XmlSerializer(typeof(T)) 
    // deserialize and return 
} 

我們已經通過它的東西,如:

[XmlRoot("apple")] 
public class Apple 
{ 
    [XmlElement("Id")] 
    public int AppleId { get; set; } 
} 

這個偉大工程的時候,我們返回一個蘋果,但是,有時我們會得到「notAnApple」。所以我要麼得到「蘋果」或「不是蘋果」。當我得到「notAnApple」時,我得到一個異常。

因爲我們有很多解決此方法編譯後的代碼,我寧願不要去改變周圍的東西,如方法簽名。然而,我確實有足夠的靈活性將我喜歡的任何課程傳遞給這種反序列化方法。

+0

什麼是你想解決?你想拒絕'notAnApple'的實例嗎?你想要捕捉異常?你想找到一種方法來正確反序列化'notAnApple'? – mellamokb 2012-07-26 17:33:24

+0

如果類型是水果,你應該能夠處理蘋果和桔子 – 2012-07-26 17:34:44

+2

如果你傳遞的數據將被反序列化爲「notAnApple」,你想要「Apple」,那麼解決這個問題的唯一方法就是不要傳入數據將反序列化爲「notAnApple」。 – 2012-07-26 17:34:52

回答

0

通常你「知道」你在序列化正是和反序列化。例如您可串行這樣的:

serializer.Serialize(stream, new Apple()); 
serializer.Serialize(stream, new notAnApple()); 

然後你會像序列:

Apple apple = (Apple)deserialzer.Deserialize(stream); 
notAnApple peach = (notAnApple)desserializer.Deserialize(stream); 

你通常不會隨意嘗試反序列化數據,以弄清楚它是什麼,你要反序列化。技術上你已經知道,因爲你有一個特定的文件格式或特定的流格式。

+0

在我的情況下,notanapple實際上是一個「錯誤」。 :P – MedicineMan 2012-07-26 17:43:25

+0

所以,顯然我不明白你想要做什麼。爲什麼你會序列化notAnApple,如果它是反序列化的錯誤? – 2012-07-26 17:44:47

+0

因爲notAnApple是一個錯誤對象,告訴我們出了什麼問題。如果我們能夠反序列化通過電線或蘋果傳來的錯誤對象,那麼將會很好。 – MedicineMan 2012-07-26 17:54:38