我們有一個解決方案,我們將一個相當大/複雜的C#對象作爲二進制數據存儲在我們的數據庫中。我擔心的是,當對這個類進行更改時,我們會冒代碼更改後保存到數據庫的數據在反序列化時失敗的風險。爲了使二進制反序列化失敗,一個類/對象必須改變多少
下面是我們正在使用的序列化對象的代碼:
public static byte[] SerializeObject(object toBeSerialized)
{
var stream = new MemoryStream();
var serializer = new BinaryFormatter();
serializer.Serialize(stream, toBeSerialized);
stream.Position = 0;
return stream.ToArray();
}
這裏是我們的Deserialize方法:
public static T DeserializeObject<T>(byte[] toBeDeserialized)
{
using (var input = new MemoryStream(toBeDeserialized))
{
var formatter = new BinaryFormatter();
input.Seek(0, SeekOrigin.Begin);
return (T) formatter.Deserialize(input);
}
}
我的問題是,什麼也改變/多少有爲了使舊對象的反序列化失敗而改變?
將數據存儲爲斑點不是一個好主意。遠比版本更差,不可能查詢數據。你不妨將它們保存到二進制文件中。你想通過使用BLOB而不是表字段來解決什麼問題?爲什麼不創建適當的模式?爲什麼不使用稀疏列,xml字段或甚至用戶定義的類型(如Oracle中的類或SQL中的CLR類型)? –
@PanagiotisKanavos - 我們很清楚,將數據存儲爲blob並不是理想的解決方案,但是考慮到這一特定需求的時間表,這是將用戶返回到應用程序的確切狀態的唯一方法,一次重大改革。我們不存儲訂單或任何我們需要以這種方式查詢的內容,這只是爲了讓用戶保存他們離開的地方。 – Ben