我有以下代码将Dictionary转换为Binary Serialize
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转换为二进制序列化有问题。
将字典传递给二进制序列化时出现以下错误。
我已在[Serializeable]
类
ConnectionManager
标记
{“在程序集'mscorlib中键入'System.Threading.AutoResetEvent', Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'是 没有标记为可序列化。“}
请建议我,我该如何解决我的问题。感谢您宝贵的时间。感谢。
答案 0 :(得分:1)
这是典型的XY problem。您不应该尝试序列化充满瞬态成员的复杂ConnectionManager
类,例如事件句柄。 Yous应该从相应的Connection
类中选择必要的配置成员,并仅序列化那些。
例如,您的代码可能如下所示:
[Serializable]
ConnectionConfiguration
{
public string UserName { get; set; }
public string Password { get; set; }
public string Host { get; set; }
public int Port { get; set; }
// some other members might follow here
}
然后,只序列化和反序列化这些对象的数组。您还可以使用POP3 / IMAP帐户类型添加一些类型属性。
然后在反序列化后,您只需在空AddImapConnection
上调用AddPop3Connection
或ConnectionManager
即可为管理器对象提供必要的初始化。