我想知道为什么一个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)
真的,当我添加一个空的构造函数时,它起作用了
关于反序列化XmlSerializer需要创建一个你的类的对象,然后从 XML 中一一设置它的属性。为此,序列化程序必须构造对象,并为此使用默认的无参数构造函数。它不能使用其他构造函数,因为它不知道需要传递给它们什么属性。
无法创建缺少无参数构造函数的对象实例已被认为是一个问题,并在 .NET 的更高版本中通过提供使用 .NET 创建未初始化对象的后门方法来修复FormatterServices.GetUninitializedObject。然而,XMLSerializer一直保持着现在的状态。
| 归档时间: |
|
| 查看次数: |
4039 次 |
| 最近记录: |