【问题标题】:class can not do serialization without empty constructor [duplicate]没有空构造函数的类无法进行序列化[重复]
【发布时间】:2013-02-25 16:17:26
【问题描述】:

我想知道为什么 class 不能在没有空构造函数的情况下执行 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)
        {

        }
    }

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

【问题讨论】:

  • @VladL 谢谢,我没有看到这个问题

标签: c#


【解决方案1】:

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

无法创建缺少无参数构造函数的对象实例已被认为是一个问题,fixed in the later versions of .NET by providing a backdoor way of creating uninitialized objects with FormatterServices.GetUninitializedObject。但是,XMLSerializer 仍处于当前状态。

【讨论】:

    猜你喜欢
    • 2013-05-26
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多