首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调试C#中的序列化问题

调试C#中的序列化问题
EN

Stack Overflow用户
提问于 2010-07-22 06:24:40
回答 2查看 1.8K关注 0票数 1

我最近在我正在开发的一个应用程序中实现了一个复制和粘贴功能。这几乎可以达到预期的效果。

我在我的用户界面中创建了一个新项目,并且可以随时复制和粘贴它,而不会出现任何问题。

但是,当我复制并粘贴由上一次复制和粘贴操作生成的项目时,我得到了一个SerializationException。它会抱怨某个类型没有被标记为可序列化。

这就是混乱的开始。第一个复制和粘贴操作与第二个操作与相同类型的对象交互。但第二个结果是异常。

更详细地说,我有一个类Slide,这是复制和粘贴操作的目标类。因此,我将该对象的一个实例放在剪贴板中,并将其再次粘贴到同一个容器中。这就像预期的那样。现在我复制插入的对象并尝试粘贴它。这是抛出异常的时候。该异常抱怨类SlideEditorUiSlideEditorUi是一个与名为SlideEditor的类交互的UserControl。它又与Slide实例交互。但是没有一个Slide实例有一个对上述任何类的引用。

所以我真的想知道为什么序列化过程要考虑这个类。为什么它只在我复制副本时才这样做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-22 06:51:02

通常,此场景中的问题是事件持有对另一个对象的引用。BinaryFormatter跟随底层字段返回到对象,然后爆炸。

如果你能找到有问题的事件,你可以使用(对于“类似字段的”事件):

代码语言:javascript
运行
复制
[field:NonSerialized]
public event SomeEventHandler EventName;

或者,对于显式实现,请将[NonSerialized]添加到支持字段。

或者,使用BinaryFormatter之外的其他格式;p或xml生成可以通过字符串使用的简单格式,或者对于较大/较复杂的对象,可以使用其他二进制序列化格式。

票数 2
EN

Stack Overflow用户

发布于 2010-07-22 06:36:18

错误是关于您的数据对象中不包含SerializableAttribute的一部分。为什么它不抛出序列化,而抛出重新序列化,我不知道。也许看到你想要序列化的POCO会更好一些。我怀疑的是,您确实遗漏了属性或字段的该属性。

请注意以下内容(来自上面的文档链接),特别是。“图”这个词意味着父类、聚合和引用的所有类都需要是可序列化的,这样才不会抛出错误:

将SerializableAttribute属性应用于类型,以指示此类型的实例可以序列化。如果要序列化的对象图中的任何类型未应用SerializableAttribute属性,则公共语言运行库将引发SerializationException。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3304377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档