我在VB.NET中的遺留系統中工作。它將數據存儲在本地XML文件中,通過使用XMLSerializer並傳入一個對象。爲了讀取數據,它以同樣的方式反序列化回對象。XML解串器命名空間與傳統文件的衝突
我們沒有顯式的模式或XML名稱空間。我知道這遠非理想,我知道如果我們改變任何屬性的名稱或順序,那麼我們會破壞向後兼容性。但是我們堅持使用這個基本系統和許多現有的文件,它必須能夠讀寫。
我還沒有觸及被序列化的對象的任何屬性。但我確實開始在應用程序的另一部分使用System.Drawing.Point。現在,當我試圖序列化或反序列化,我得到InvalidOperationException異常此消息:
類型「System.Windows.Point」和「System.Drawing.Point」都使用XML 類型名稱,「點」,來自命名空間''。使用 的XML屬性爲類型指定唯一的XML名稱和/或名稱空間。
我承認我不明白系統如何突然決定這種類型是不明確的。拋出錯誤的類的屬性被特別聲明爲System.Windows.Point。其他Point的任何實例在任何地方都是序列化或反序列化的。
我已經搜索了很多關於這個異常,但我看到所有的討論似乎都與Web服務和開發人員命名的類有關。答案似乎是「重命名您的類」,或者「使用XML屬性爲您的類型指定新的XML名稱空間」。
我想我不能做這些事情。我無法重命名System.Windows.Point。我無法更改系統期望寫入或讀取的任何標籤,因爲我無法使用過去寫入的任何文件來分解兼容性。
當我沒有做任何更改XML的操作時,這個錯誤是如何開始顯示的?我該如何解決這個問題,而不會影響我訪問現有XML文件的能力?
編輯: XML文件本身並不指向任何地方的「點」。 XML看起來像這樣:
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Segment>
<ID>0</ID>
<Location>
<X>37</X>
<Y>330</Y>
</Location>
(other properties)
</Segment>
<Segment>
.....
</MyClass>
你能提供一個小代碼示例來演示這個問題嗎?和/或一個XML文件,它有一個點? – rene
編輯提供了一個XML示例。我無法提供演示問題的小代碼示例,因爲我不知道此代碼的哪一部分導致該問題。 – splingmer