gre*_*b64 5 c# serialization assemblies visual-studio
希望我能正确地问我的问题。我在尝试序列化特定对象时遇到以下异常(我熟悉使用标准 [Serialized] 属性)
mscorlib.dll 中发生了“System.Runtime.Serialization.SerializationException”类型的第一次机会异常
其他信息:程序集“System,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”中的类型“System.ComponentModel.Component”未标记为可序列化。
我找不到这到底是从哪里来的。我的类都没有继承自 Component,它们的基类都没有继承自组件。
我已经到了将每个委托\成员变量标记为 [NonSerialized] 的地步,并且每次我尝试序列化时它仍然抛出此异常。
所以我的问题是:我可以使用这个 PublicKeyToken,并找到正在尝试序列化的确切类\成员吗?
我会根据看到这个的次数太多而给出一个猜测:您有一个event
,并且您已经从该事件订阅了一些 UI 代码或其他Component
相关内容。
当使用 时BinaryFormatter
,事件(或者更确切地说,支持字段)被序列化。如果您不希望出现这种情况,请确保标记您的事件:
[field:NonSerialized]
public event EventHandler SomethingHappened;
Run Code Online (Sandbox Code Playgroud)
我还会注意到,使用时会发生很多(IMO,主观的)不好的事情BinaryFormatter
,我真的建议使用其他东西。例如,XmlSerializer(关于一个相当流行的开源二进制格式化程序也可用的低声低语)。