2011-02-11 39 views
8

我創建了一個API包裝類庫,用於從第三方獲取其餘API。C#反序列化xml具有多個可能的命名空間

它們都在工作,直到他們最近更新了其產品的最新版本中的API並向根元素添加了命名空間,現在我的反序列化代碼失敗了。

我的一個類的實例:

[Serializable] 
[XmlRootAttribute(ElementName = "exit_survey_list")] 
public class SupportExitSurveyCollection : ApiResult { .... } 

如果我設置在XmlRootAttribute到新的命名空間Namespace屬性返回,然後重新正常工作。

但我需要支持兩個版本的API(名稱空間而不是),因爲我無法確定哪個版本的API可用。

我想在沒有複製不同版本的類的情況下工作,但不知道是否可能。

感謝您的任何意見和建議。

回答

1

我不認爲這是可能的。

您可以實現IXmlSerializable接口,並自己控制序列化 - 這可以工作,但它可能不是你想要的,因爲它需要你自己在代碼中做很多映射。

另一種選擇是預處理消息並添加命名空間(如果缺失)。然後你可以有一個單一的反序列化過程。

+0

感謝您的想法,我去了預處理路線,並刪除了任何名稱空間聲明。我認爲如果他們決定再次改變命名空間,這將使它在將來繼續工作。 – Adam 2011-02-11 19:35:38

相關問題