Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#无法使用列表序列化类<;CustomObject>;作为财产_C#_List_Xml Serialization - Fatal编程技术网

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,它工作起来很有魅力