我如何解决一个PublicKeyToken到一个类?(串行化问题)

本文关键字:一个 问题 何解决 PublicKeyToken 解决 | 更新日期: 2023-09-27 18:14:40

希望我的问题问对了。在尝试序列化特定对象(我熟悉使用标准[Serializable]属性)时,我得到以下异常

类型的第一次机会异常"System.Runtime.Serialization。SerializationException'发生在mscorlib.dll

附加信息:类型为System.ComponentModel。组件的Assembly’System, Version=4.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089'未标记为可序列化。

我找不到这到底是从哪里来的。我的所有类都没有继承自Component,它们的基类也没有继承自Component。

我已经到了我将每个委托'成员变量标记为[NonSerialized]的地步,并且每次我尝试序列化时它仍然抛出这个异常。

所以我的问题是:我可以使用这个PublicKeyToken,并找到什么确切的类'成员试图序列化?

我如何解决一个PublicKeyToken到一个类?(串行化问题)

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

当使用BinaryFormatter时,事件(或者更确切地说,后备字段)是序列化的。如果你不想这样,确保你的事件被标记为:

[field:NonSerialized]
public event EventHandler SomethingHappened;

我还会注意到,当使用BinaryFormatter时,会发生很多 (IMO,主观)不好的事情,我真的会建议使用其他东西。例如XmlSerializer(嘟囔了一些听不清的关于开源二进制格式化器也可用的内容)。

不,PublicKey不会帮助您找到问题。PublicKeyToken是用于为程序集签名的密钥,此密钥用于多个CLR程序集。

我会开始调整要序列化的对象的数量,直到问题消失。也试着关闭"我的代码"(工具->选项->调试),并开始打破所有异常-你可以稍微更好地了解它首先失败的地方。