C#无法使用列表序列化类<;CustomObject>;作为财产
嗨 我正在尝试序列化C#无法使用列表序列化类<;CustomObject>;作为财产,c#,list,xml-serialization,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")]
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;
}
}
FileStream FileStream=newfilestream(“batches.xml”,FileMode.Open);
XmlSerializer serializer=新的XmlSerializer(typeof(List));
ListListofBatches=新列表();
[可序列化]
[XmlRoot(“批”)]
公共类批处理
{
[XmlElement(“标题”)]
公共字符串标题
{
获得;设置;
}
[XmlArray(“ListOfLinks”),XmlArrayItem(“Link”,Type=typeof(Link))]
公共列表链接
{
获得;设置;
}
}
[可序列化]
[XmlRoot(“链接”)]
公共类链接
{
[XmlElement(“Uri”)]
公共Uri
{
得到;
设置
}
[XmlElement(“状态”)]
公共字符串状态
{
得到;
设置
}
}
获取以下错误:
反映类型“System.Collections.Generic.List`1[DownloadTRON.Entities.Batche]”时出错
从过去4个小时以来一直在尝试这个,
谁能指出我做错了什么
问候
Pravin您必须将xml中的额外类型传递给XmlSerializer(在您的示例中是链接类型)。 用这个
XmlSerializer serializer = new XmlSerializer(typeof(List<Batche>), new Type[] {typeof(Link)});
XmlSerializer serializer=newxmlserializer(typeof(List),newtype[]{typeof(Link)});
您的代码或泛型的序列化没有问题。Uri没有默认构造函数,无法序列化。考虑把它变成一个字符串,事情就会起作用。如果您仅计划使用XmlSerializer,则可以删除Serializable属性,因为它未被使用
当我用调试器运行代码并看到异常时,出现了一个内部异常和一个内部异常以及一个内部异常等等。如果可以的话,最好跟着兔子走。您自己的类必须实现一个没有参数的公共构造函数,例如类链接 您必须实现一个额外的构造函数
public Link(){}这可能有助于将此代码复制并粘贴到我的测试程序中,它会给我一个InvalidOperationException。在内部异常链之后,问题的根源仍然是没有默认构造函数的Uri。他应该用字符串替换Uri。还必须指定除批处理之外(在XmlSerializer中)反序列化的所有额外类型。谢谢,刚刚用字符串替换了Uri,它工作起来很有魅力