类不能在没有空构造函数的情况下进行序列化

Hod*_*lom 1 c#

我想知道为什么一个class不能serialization没有空构造函数。

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

ClassName cannot be serialized because it does not have a parameterless constructor.
Run Code Online (Sandbox Code Playgroud)

代码是这样的:

   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)
        {

        }
    }
Run Code Online (Sandbox Code Playgroud)

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

das*_*ght 5

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

无法创建缺少无参数构造函数的对象实例已被认为是一个问题,并在 .NET 的更高版本中通过提供使用 .NET 创建未初始化对象的后门方法来修复FormatterServices.GetUninitializedObject。然而,XMLSerializer一直保持着现在的状态。