如何将 PublicKeyToken 解析为类?(连载问题)

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,并找到正在尝试序列化的确切类\成员吗?

Mar*_*ell 5

我会根据看到这个的次数太多而给出一个猜测:您有一个event,并且您已经从该事件订阅了一些 UI 代码或其他Component相关内容。

当使用 时BinaryFormatter,事件(或者更确切地说,支持字段)被序列化。如果您不希望出现这种情况,请确保标记您的事件:

[field:NonSerialized]
public event EventHandler SomethingHappened;
Run Code Online (Sandbox Code Playgroud)

我还会注意到,使用时会发生很多(IMO,主观的)不好的事情BinaryFormatter,我真的建议使用其他东西。例如,XmlSerializer(关于一个相当流行的开源二进制格式化程序也可用的低声低语)。