我正在重構一些解析預先存在的XML文件(其中我沒有創建並且無法控制設計)的代碼。目前,我將XML讀入XDocument
並執行各種linq查詢來提取數據。我想要做的是使用XML 反序列化來爲我工作。反序列化嚴重設計的XML
我想這樣做是因爲代碼的其他部分使用了XML反序列化(並且我想使代碼在操作中保持一致),並且更好地記錄了此XML文件的結構。
但深埋7層內部的XML是如下數據:
<objects>
<object name="Fred">
<type>
<BOOL/>
</type>
</object>
<object name="Barney">
<type>
<WORD/>
</type>
</object>
<object name="Wilma">
<type>
<derived name="Special1"/>
</type>
</object>
<object name="Betty">
<type>
<array>
<dimension upper="3" lower="0"/>
<INT/>
</array>
</type>
</object>
<object name="Dino">
<type>
<array>
<dimension upper="3" lower="0"/>
<derived name="Special2"/>
</array>
</type>
</object>
</objects>
直到此時我已經能夠逃脫定義簡單類的XML模式。
但隨着object
數據Type
元素的值被表達爲子元素(而不是一個屬性),選擇那些是有嚴格規定的類型(EG BOOL
,WORD
)。在用戶定義類型的情況下,使用不同的子元素,最終的類型名稱在該子元素的name
屬性中定義(EG Special1
或Special2
)。 (另請注意,我不/不能有標準類型的完整列表。)
(請注意,儘管該XML設計很糟糕,這是不畸形)
然後,事情當對象是一個數組並且該類型被包裝在一個array
元素中時,會變得更加混亂。
最終我想要的type
(既包括標準和用戶定義的)和array dimensions
作爲object
類(以及指示時遇到derived
類型)的屬性。
我不知道如何構建一個可以從這個XML反序列化的類,但是我懷疑我需要深入研究一下這個類的一些自定義XML處理(或者可能是XSLT轉換?)。
手動序列化似乎更優化,然後嘗試重新設計一些東西,以便能夠使用'XmlSerializer'。因爲你可能不得不用屬性來調整它,或者改變類型本身(動態創建它?)。那麼爲什麼不手工手工閱讀/保存? – Sinatr
@Sinatr我不是在追求你的意思,所以你可以擴展你的評論? –
XML是否在文檔的頂部有一個XML模式(XSD或DTD)?您需要在一天結束時提供一個XSD,以自動從複雜對象序列化/反序列化。 –