我有一個相當簡單的DAL程序集,它由SalesEnquiry
類組成,它包含另一個Vehicle
類的List<T>
。將某些XML(通過流)反序列化爲父/子對象
我們將通過電子郵件接收XML文件,我想用它來填充我的SalesEnquiry類的實例,所以我試圖使用反序列化。
我已將XMLRoot
/XMLElement
//XMLIgnore
屬性添加到兩個類中,因爲我認爲是合適的。但是,當我嘗試反序列化時,父SalesEnquiry對象已填充,但沒有子Vehicle對象。
據我所知,反序列化List<T>
可能會很棘手,但我不知道爲什麼,如何避免問題,或者即使這是我爲什麼掙扎。在調試時,我已經成功序列化了一個Vehicle對象,所以我假設我正朝着正確的方向前進,但是當我對SalesEnquiry XML(包含一個或多個子對象)進行反序列化時車輛),List<Vehicle>
未填充。
我哪裏錯了?
更新:
在測試項目中,我係列化含SalesEnquiry
兩輛車並保存到一個文件中。然後,我將文件加載到一個反序列化的對象中。有效!
那有什麼區別?這些車輛記錄如下:
<?xml version="1.0" encoding="utf-8"?>
<enquiry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<enquiry_no>100001</enquiry_no>
<vehicles>
<Vehicle>
<vehicle_type>Car</vehicle_type>
<vehicle_make>Ford</vehicle_make>
<vehicle_model>C-Max</vehicle_model>
...
需要注意的是車輛有一個初始資本,而我的傳入的XML沒有。在我的Vehicle
班裏,我給了班級一個[XmlRoot("vehicle")]
的屬性,我雖然會做鏈接,但顯然不是。我猜這是有道理的,因爲儘管Vehicle本身就是一個類,但它僅僅是我的SalesEnquiry中列表中的一個數組項。
在這種情況下,問題是 - 如何註釋Vehicle
類,這樣我可以映射進來的XML元素(<vehicle>
)到我的列表項(Vehicle
)?[XmlArrayItem]
(或[XmlElement]
就此而言)在此聲明類型中無效。
在此示例中,我可以請求生成XML的人使用<Vehicle>
而不是<vehicle>
,但可能會出現我沒有這種自由的情況,所以我寧願學習解決方案,而不應用解決方法。
結論:
通過添加[XmlArrayItem( 「車輛」 的typeof(車輛))爲我列出現有的裝修,XML現在能夠完全反序列化。唷!
你應該得到25個單獨答案的聲望,但我希望我可以給你更多的這個例子的徹底性。謝謝。 – CJM 2010-08-05 15:20:55