C# 调试C语言中的序列化问题#
我最近在正在开发的应用程序中实现了一个复制粘贴功能。这与预期的效果非常接近。C# 调试C语言中的序列化问题#,c#,serialization,clipboard,C#,Serialization,Clipboard,我最近在正在开发的应用程序中实现了一个复制粘贴功能。这与预期的效果非常接近。 我在用户界面中创建了一个新项目,可以随时复制和粘贴它,而不会出现任何问题。 但是,当我复制并粘贴由以前的复制和粘贴操作生成的项目时,我会得到一个序列化异常。它抱怨某个类型没有被标记为可序列化 这就是混乱的开始。第一个复制粘贴操作与第二个复制粘贴操作的对象类型相同。但第二个结果是例外 更详细地说,我有一个类幻灯片,这是复制粘贴操作的目标类。因此,我将该对象的一个实例放在剪贴板中,并将其再次粘贴到同一容器中。这是预期的结果
我在用户界面中创建了一个新项目,可以随时复制和粘贴它,而不会出现任何问题。
但是,当我复制并粘贴由以前的复制和粘贴操作生成的项目时,我会得到一个
序列化异常。它抱怨某个类型没有被标记为可序列化
这就是混乱的开始。第一个复制粘贴操作与第二个复制粘贴操作的对象类型相同。但第二个结果是例外
更详细地说,我有一个类幻灯片
,这是复制粘贴操作的目标类。因此,我将该对象的一个实例放在剪贴板中,并将其再次粘贴到同一容器中。这是预期的结果。现在我复制插入的对象并尝试粘贴它。此时将引发异常。异常抱怨类slideditorui
SlideEditor UI
是一个与名为SlideEditor
的类交互的UserControl
。这反过来又与幻灯片
实例交互。但是没有一个幻灯片
实例引用了前面提到的任何类。
所以我真的很想知道为什么序列化过程会考虑这个类。为什么它只在我复制副本时才这样做 错误与数据对象中不包含的部分有关。我不知道为什么它不支持序列化,而是支持重新序列化。也许看到您正在尝试序列化的POCO会很好。我怀疑的是,您确实忽略了属性或字段上的属性
请注意以下内容(从上面的文档链接),特别是“图形”一词,这意味着所有类、父类、聚合和引用都需要可序列化才能避免抛出错误:
应用SerializableTribute
属性,以指示
此类型的实例可以是
连载。共同语言
运行时引发序列化异常
如果对象图中有任何类型
正在序列化的对象没有
SerializableAttribute属性
应用
此场景中的问题通常是包含对另一个对象的引用的事件BinaryFormatter
跟随基础字段返回到对象和boom
如果您可以找到您可以使用的违规事件(对于“类似字段”的事件):
或者,对于显式实现,将[NonSerialized]
添加到支持字段
或者;使用除BinaryFormatter以外的其他工具;p Json或xml是可以通过字符串使用的简单格式,对于更大/更复杂的对象,还有其他二进制序列化格式。这确实是一个事件。我不知道这些也是序列化的。非常感谢。@gencha严格来说,序列化的不是事件,而是支持字段的内容。事件有点像属性:它定义访问器方法BinarySerializer
是一个字段级序列化程序,因此绕过它。
[field:NonSerialized]
public event SomeEventHandler EventName;