と を使用してBinaryFormatter
オブジェクト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;
}
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();
}
}