类不能做没有空构造函数的序列化
问题描述:
我想知道为什么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)
{
}
}
说真的,当我添加一个空的构造,它的工作
答
关于反序列化XmlSerializer
需要创建您的类的对象,然后从XML逐个设置其属性。为了这样做,序列化程序必须构造该对象,并使用默认的无参数构造函数。它不能使用其他构造函数,因为它不知道需要传递给它们的属性。
无法创建缺少无参数构造函数的对象的实例已被识别为问题,并且fixed in the later versions of .NET by providing a backdoor way of creating uninitialized objects with FormatterServices.GetUninitializedObject
。然而,XMLSerializer
已被留在当前状态。
@VladL谢谢,我没有看到这个问题 – 2013-03-10 13:00:06