2011-01-22 22 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)的公共构造函数,例如用于类链接 必须实现额外的构造

公共链接({}