Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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# 尝试使用泛型对象序列化新XML文件_C#_Xml_File_Xmlserializer_Generic List - Fatal编程技术网

C# 尝试使用泛型对象序列化新XML文件

C# 尝试使用泛型对象序列化新XML文件,c#,xml,file,xmlserializer,generic-list,C#,Xml,File,Xmlserializer,Generic List,我正在尝试使用serialize创建一个xml文件,其中包含一个自定义类,但遇到了一个异常: “生成xml文档时出错。” 我用一个字符串列表尝试了它,它可以工作,但不能使用自定义类型。。。 有人有idia吗?为什么 public class MyXML { List<MyClass> Mylist; public XmlSerializer serialize; public MyXML() { Mylist=new List<

我正在尝试使用serialize创建一个xml文件,其中包含一个自定义类,但遇到了一个异常: “生成xml文档时出错。”

我用一个字符串列表尝试了它,它可以工作,但不能使用自定义类型。。。 有人有idia吗?为什么

public class MyXML
{
    List<MyClass> Mylist;
    public XmlSerializer serialize;

    public MyXML()
    {
        Mylist=new List<MyClass>();
        serialize = new XmlSerializer(typeof(List<MyClass>));
    }

    public void Save(List<MyClass> newList)
    {
        using (FileStream writer = File.OpenWrite(Directory.GetCurrentDirectory()  + "/files/MyNewFile.xml"))
        { serialize.Serialize(writer, newList); }
    }
}
公共类MyXML
{
列出我的清单;
公共XmlSerializer序列化;
公共MyXML()
{
Mylist=新列表();
serialize=新的XmlSerializer(typeof(List));
}
公共作废保存(列表新建列表)
{
使用(FileStream writer=File.OpenWrite(Directory.GetCurrentDirectory()+“/files/MyNewFile.xml”))
{serialize.serialize(writer,newList);}
}
}

诀窍在于:获取当前代码,并将其包装成:

try {
    // create and use serializer
} catch(Exception ex) {
    while(ex != null) {
        Debug.WriteLine(ex.Message);
        ex = ex.InnerException;
    }
    throw;
}
XmlSerializer在无法序列化/反序列化某些内容时,实际上会给出非常详细的原因,但它们隐藏在内部异常中。通过以上内容,您将能够看到调试输出中存在的问题

常见嫌疑犯:

  • 类型必须是完全公共的
  • 类型必须具有公共无参数构造函数
  • 如果实际实例是子类,则必须提前声明

请显示MyClass,是否为空类?您的自定义类是否标记为可序列化?@AntonioBakula不需要;XmlSerializer不会对此进行检查