类不能做没有空构造函数的序列化

类不能做没有空构造函数的序列化

问题描述:

我想知道为什么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) 
     { 

     } 
    } 

说真的,当我添加一个空的构造,它的工作

+0

@VladL谢谢,我没有看到这个问题 – 2013-03-10 13:00:06

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

无法创建缺少无参数构造函数的对象的实例已被识别为问题,并且fixed in the later versions of .NET by providing a backdoor way of creating uninitialized objects with FormatterServices.GetUninitializedObject。然而,XMLSerializer已被留在当前状态。