2016-12-01 71 views
2

我試圖用BinaryFormatter連載我的對象:二進制格式化 - 類型用戶控件沒有標記爲可序列

private UserSettings _userSettings; 
var serializer = new BinaryFormatter(); 
using (var file = new FileStream(@"D:\test.bin", FileMode.Create)) 
{ 
    serializer.Serialize(file, _userSettings); 
} 

但我發現了一個奇怪的例外:

類型「MyCustomUserControl」在彙編'xxx'中沒有標記爲 可序列化。

UserSettings不必MyCustomUserControl任何參考,但它是由MyCustomUserControl引用。

+0

你使用'[Serializable接口]'你CustomUserControl? –

回答

2

對控件的引用可以隱藏在事件中。如果您UserSettings類實現了控制訂閱的事件,則[field:NonSerialized]屬性添加到事件:

[field:NonSerialized] 
public event PropertyChangedEventHandler PropertyChanged; 
1

對於使用BinaryFormatter序列化器,您的類需要爲標記爲Serializable。以下是一個示例:

[Serializable] 
public class MyCustomUserControl: Control 
{ 
    // 
} 
+1

如果您需要對序列化過程進行細粒度控制,則還可以手動實現ISerializable來解決此問題。 – Kevin

+0

@凱文謝謝你提到它。 –

+0

wouldnt它''[Serializable()]'不''[Serializable]' – peterpep

相關問題