二进制格式化程序 - 类型UserControl未标记为可序列化

时间:2016-12-01 14:51:13

标签: c# serialization

我尝试使用BinaryFormatter序列化我的对象:

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

但是我得到了一个奇怪的例外:

  

输入' MyCustomUserControl'在Assembly' xxx'未标记为   序列化的。

班级UserSettings没有对MyCustomUserControl的任何引用,但它被MyCustomUserControl引用。

2 个答案:

答案 0 :(得分:2)

可以在事件中隐藏对控件的引用。如果您的UserSettings类实现了订阅控件的事件,请将[field:NonSerialized]属性添加到事件中:

[field:NonSerialized]
public event PropertyChangedEventHandler PropertyChanged;

答案 1 :(得分:1)

要使用BinaryFormatter序列化程序,您的班级需要标记为Serializable。这是一个例子:

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