2011-01-22 30 views
5

嗨 我試圖序列C#未能與名單<CustomObject>物業序列化類

FileStream fileStream = new FileStream("batches.xml", FileMode.Open); 
XmlSerializer serializer = new XmlSerializer(typeof(List<Batche>)); 
List<Batche> listOfBatches = new List<Batche>(); 

[Serializable] 
[XmlRoot("Batch")] 
public class Batche 
{ 

    [XmlElement("Title")] 
    public string Title 
    { 
     get;set; 
    } 

    [XmlArray("ListOfLinks"),XmlArrayItem("Link",Type = typeof(Link))] 
    public List<Link> Links 
    { 
     get;set; 
    } 
} 

[Serializable] 
[XmlRoot("Link")] 
public class Link 
{ 
    [XmlElement("Uri")] 
    public Uri Uri 
    { 
     get; 
     set; 
    } 

    [XmlElement("Status")] 
    public string Status 
    { 
     get; 
     set; 
    } 

} 

獲得以下錯誤: 有反射式「的錯誤System.Collections.Generic.List` 1 [DownloadTRON.Entities.Batche]」。

自從最近4小時以來一直在嘗試, 可以任何機構指出我在做什麼錯了!

問候 普拉

+0

這可能有助於HTTP://計算器。 com/questions/1212742/xml-serialize-generic-list-of-serializable-objects – btlog 2011-01-22 16:14:08

回答

4

你的代碼或泛型序列化沒有問題。 Uri沒有默認的構造函數,也不能被序列化。考慮將其更改爲一個字符串,事情將起作用。如果您只打算使用XmlSerializer,則可以刪除Serializable屬性,因爲它不被使用。

當我用調試器運行你的代碼並看到異常時,出現了內部異常,內部異常等內部異常。當你可以的時候,總是把這隻兔子放在洞裏。

2

你要通過額外的類型,可在XML中,以XmlSerializer的,你的情況鏈接類型。 使用這個

XmlSerializer serializer = new XmlSerializer(typeof(List<Batche>), new Type[] {typeof(Link)}); 
+0

將此代碼複製並粘貼到我的測試程序中,它給我一個InvalidOperationException。在內部異常鏈之後,問題的根源仍然是沒有默認構造函數的Uri。 – 2011-01-22 16:32:05

+0

是的,我正要補充一點。他應該用字符串替換Uri。並且還必須指定除批次之外的所有正在反序列化的額外類型(在XmlSerializer ctor中)。 – 2011-01-22 16:35:09

2

自己的類必須實現無PARAMS)的公共構造函數,例如用於類鏈接 必須實現額外的構造

公共鏈接({}