C# 序列化异常类型";未标记为可序列化";-但事实确实如此

C# 序列化异常类型";未标记为可序列化";-但事实确实如此,c#,winforms,serialization,C#,Winforms,Serialization,在Windows窗体、.NET Framework 4.0中,我试图序列化我编写的类的实例 该类被标记为可序列化,但使用该类的表单(显然)不是 我不想序列化表单的实例。我想序列化类中的数据 我的类中的所有内容都标记为可序列化,那么为什么我仍然得到SerializationException呢 (单击>>此处将BrazierMatrix2标记为[可序列化]已解决。) 我需要为EventHandler设置一个 无法在类中序列化事件委托(请参阅) 在球场上做标记听起来很简单 在我的代码中,我简单地添

在Windows窗体、.NET Framework 4.0中,我试图序列化我编写的类的实例

该类被标记为可序列化,但使用该类的表单(显然)不是

我不想序列化表单的实例。我想序列化类中的数据

我的类中的所有内容都标记为可序列化,那么为什么我仍然得到SerializationException呢


(单击>>此处将
BrazierMatrix2
标记为
[可序列化]

已解决。) 我需要为EventHandler设置一个

无法在类中序列化事件委托(请参阅)

在球场上做标记听起来很简单

在我的代码中,我简单地添加了这一行:

[field:NonSerializedAttribute()]
public event EventHandler BrazierCuttoffChanged;

这是任何JSON序列化都可以遇到的问题,包括MVC4中的Web API

我发现这篇文章在我获取序列化时非常有用,除了常量int值。任何常量值都需要使用与Nick Freeman的答案相同的属性进行标记:

[field: NonSerializedAttribute]
const int iCantBeSerialized = 1;

遇到同样的问题,我的可序列化NotifyObject基类的PropertyChanged EventHandler已被一些进入序列化队列的viewmodels订阅。因此,将NonSerializedAddress属性添加到此EventHandler节省了我的时间。:-)

看起来您正在尝试序列化从
表单继承的内容
?您提供的部分定义的一半没有标记为
可序列化
。你会发现很难序列化从你无法控制的其他东西继承的东西,很多东西都没有标记为可序列化,你将无法更改
Form
就是这样一个类。
BrazierCutoff
类有一个
EventHandler
,使我能够对数据中的更改进行编码。这会导致我的问题吗?如果是这样,我将如何从类中排除EventHandler?我的类应该很快发布。
BrazierMatrix2
是包含我的数据类实例的表单。我只想序列化
BrazierCuttoff
(标记为可序列化)中的数据。表单不需要为此进行序列化…是否应该??:惑儒:你使用了错误的表单架构,你必须划分模型、控制器和视图。阅读有关mvvm、mvcFirst等模式设计的文章,我没有投反对票。我投票给所有努力回答我问题的人。第二,你能解释一下关于mwm/mvc的评论吗?(不熟悉这些首字母缩略词)。这是应用程序可视部分的设计模式,您可以在这里了解它。它是设备数据类、管理器类和视图类,如果您使用此模式,您将不会遇到此问题和类似问题您面临此问题,因为您的体系结构存在一些组织问题,这个模式可以帮助你创建一个好的解决方案,但是要找到答案还需要更长的时间和更艰苦的工作。我正准备发布这个,当我看到你对这个事件的评论时。订阅列表在默认情况下是序列化的,因此您需要忽略它。您是如何发现这一点的?通过调试?@Protectorone-在我的谷歌搜索结果中,我找到了上面提到的微软链接。可悲的是,就像微软的很多东西一样,他们删除了链接。我无法想象这样保存档案会占用太多的存储空间,但他们还是会删除内容。@Protectorone-是的,我在调试器中发现了这个异常。我注意到我永远无法反序列化保存的状态,因此我参与了serialize(save)和deserialize(get)方法的过程。一旦发现SerializationException,我就开始搜索消息文本“notmarkedasserializable”
[Serializable()]
public enum EnumeratedLevel {
  NA_Silver = Clicker.NA_Silver, // Color.Silver
  E_Orange = Clicker.E_Orange, // Color.Orange
  D_Yellow = Clicker.D_Yellow, // Color.Yellow
  C_Green = Clicker.C_Green, // Color.Lime
  B_Blue = Clicker.B_Blue, // Color.DodgerBlue
  A_Violet = Clicker.A_Violet, // Color.Violet
}
[field:NonSerializedAttribute()]
public event EventHandler BrazierCuttoffChanged;
[field: NonSerializedAttribute]
const int iCantBeSerialized = 1;
[field:NonSerializedAttribute()]
public event EventHandler BrazierCuttoffChanged;