1

我想知道为什么 aclass不能serialization没有空的构造函数。

当我收到此错误消息时,我尝试了几次:

ClassName cannot be serialized because it does not have a parameterless constructor.

代码如下:

   public void DoSerialize(string path)
    {
        try
        {
            XmlSerializer serializer = new XmlSerializer(typeof(List<MyClass>));
            TextWriter textWriter = new StreamWriter(path);
            serializer.Serialize(textWriter, MyList);
            textWriter.Close();
        }
        catch (Exception e)
        {

        }
    }

真的,当我添加一个空的构造函数时,它起作用了

4

1 回答 1

5

在反序列XmlSerializer化时需要创建一个你的类的对象,然后从 XML 中一一设置它的属性。为此,序列化程序必须构造对象,并为此使用默认的无参数构造函数。它不能使用其他构造函数,因为它不知道需要传递给它们什么属性。

无法创建缺少无参数构造函数的对象实例已被认为是一个问题,并在 .NET 的更高版本中通过提供一种使用FormatterServices.GetUninitializedObject. 但是,XMLSerializer一直保持目前的状态。

于 2013-03-10T13:03:42.840 回答