Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调试C语言中的序列化问题#_C#_Serialization_Clipboard - Fatal编程技术网

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;