我正在使用BinaryFormatter
and aMemoryStream
序列化对象,然后将其作为二进制 blob 存储在数据库中。然后我从数据库中检索数据并使用 binaryformatter 和内存流进行反序列化。
但是,当我尝试反序列化对象时,我经常会抛出异常。最显着'an object with the same key already exists'
或'cannot convert string to int64'
有谁知道为什么反序列化会失败?或者如何找出哪个字典对象有问题?
我的序列化功能如下...
private byte[] SerializeUserData(UserData ud)
{
byte[] data = null;
using (MemoryStream ms = new MemoryStream())
{
ms.Seek(0, SeekOrigin.Begin);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, ud);
data = ms.ToArray();
}
return data;
}
private UserData Deserialize()
{
UserData ud = null;
using (MemoryStream ms = new MemoryStream(mSession.BinarySession))
{
BinaryFormatter bf = new BinaryFormatter();
ud = bf.Deserialize(ms) as UserData;
}
return ud;
}
UserData 类有点像怪物,但它被标记为 [serializable] 并且其对象树中的所有类也被标记为 [serializable]。本课程的一部分如下:
[Serializable]
public class UserData
{
public UserData() { Clear(); }
public Guid Id { get; set; }
public Account Account { get; set; }
public List<Account> OldAccounts{ get; set; }
public void Clear()
{
Account = null;
OldAccounts = new List<Account>();
Id = Guid.NewGuid();
}
}