2013-03-10 110 views
0

我想知道爲什麼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

回答

2

關於反序列化XmlSerializer需要創建您的類的對象,然後從XML逐個設置其屬性。爲了這樣做,序列化程序必須構造該對象,並使用默認的無參數構造函數。它不能使用其他構造函數,因爲它不知道需要傳遞給它們的屬性。

無法創建缺少無參數構造函數的對象的實例已被識別爲問題,並且fixed in the later versions of .NET by providing a backdoor way of creating uninitialized objects with FormatterServices.GetUninitializedObject。然而,XMLSerializer已被留在當前狀態。

相關問題