C#无法使用List <customobject>作为属性</customobject>序列化类

时间:2011-01-22 16:10:42

标签: c# list xml-serialization

您好 我正在尝试序列化

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个小时以来一直在尝试这个, 任何人都可以指出我在做什么错了!

此致 普拉

3 个答案:

答案 0 :(得分:4)

您的代码或泛型的序列化没有问题。 Uri没有默认构造函数,无法序列化。考虑将其更改为字符串,事情就会奏效。如果您只打算使用XmlSerializer,则可以删除Serializable属性,因为它未被使用。

当我使用调试器运行代码并看到异常时,内部异常有一个带有内部异常的内部异常,依此类推。在可能的情况下,一定要好好跟随那只兔子。

答案 1 :(得分:2)

您需要将xml中的其他类型传递给XmlSerializer,在您的案例中为Link类型。 使用此

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

答案 2 :(得分:2)

您自己的类必须实现没有参数的公共构造函数,例如类Link 你必须实现一个额外的构造函数

public Link(){}