【发布时间】:2017-10-12 04:43:40
【问题描述】:
我有以下代码将字典转换为二进制序列化
private IDictionary<string, ConnectionManager> dictionary = new SortedDictionary<string, ConnectionManager>();
ConnectionManager conn;
dictionary.Add("testid", conn = new ConnectionManager());
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(@"c:\test1.txt",
FileMode.Create,FileAccess.Write, FileShare.None);
formatter.Serialize(stream, dictionary);
详细看这里的类代码
ConnectionManager.cs
https://github.com/Sicos1977/MailKitImapIdler/tree/master/MailKitImapIdler
我在将 Dictionary 转换为二进制序列化时遇到问题。
将字典传递到二进制序列化时出现以下错误。
我已经在ConnectionManager 类的顶部应用了[Serializeable] 标签
{"在程序集 'mscorlib 中键入 'System.Threading.AutoResetEvent', 版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089' 是 未标记为可序列化。"}
请建议我,我该如何解决我的问题。感谢您宝贵的时间。谢谢。
【问题讨论】:
-
请提供简短而完整的代码如何重现此问题。
-
尝试将
NonSerialized属性添加到您的AutoResetEvent成员。 -
ConnectionManagerIdle 类有 1248 行代码。你可以在这里看到名为 ConnectionManager.cs github.com/Sicos1977/MailKitImapIdler/tree/master/… 的类
-
那么问题可能应该是 你为什么要序列化
Connection对象? 你的错误来自复杂类的某些成员包含AutoResetEvent的事实显然是不可序列化的。 -
然后您应该创建类似
ConnectionConfiguration类的所有必需成员(用户名、密码等)并序列化这些简单类的数组,这应该是一项微不足道的任务。然后在您的程序再次启动并反序列化您的数组后,您应该使用它来创建所有ConnectionManager对象。
标签: c# dictionary serialization