yam*_*pog 4 c# serialization memorystream binaryformatter
我使用BinaryFormatter和a MemoryStream来序列化一个对象,然后将它作为二进制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;
}
Run Code Online (Sandbox Code Playgroud)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我没有在最新版本的框架中尝试过这个,但我认为经验法则可能仍然很好,不要使用具有自动属性的BinaryFormatter.
问题是,BinaryFormatter使用支持字段而不是用于执行序列化/反序列化的属性.对于自动属性,后备字段在编译时生成.而且每次都不保证是相同的.这可能意味着您反序列化您的对象,并且您没有准确地回复您放入的内容.
有关更多信息,请阅读:自动属性和二进制格式
| 归档时间: |
|
| 查看次数: |
3998 次 |
| 最近记录: |