是這樣的
我有寫一個序列化的方法把我的class存檔
BinaryFormatter myBinaryFormatter = new BinaryFormatter();
myBinaryFormatter.Serialize(oFileStream, saveObj);
現在的問題是,我的saveObj會需要與時俱進的新增功能和變數
但每次更新我的class,我的舊的存檔就無法被使用 (因為格式不符)
我目前想到的解決方法是用繼承
像是這樣:主名稱 + 撰寫日期,然後繼承最後一版的class如下
class MyObj180920: object{}
class MyObj180925: MyObj180920{}
class MyObj181001: MyObj180925{}
然後我有個上層class manage
{
Object myObj;
System.Type myObjType;
}
每次我的程式會實體化最新的class和type
myObj = new MyObj180920;
myObjType = (new MyObj180920).GetType();
然後序列化的時候應該(我覺得)會將實作品(MyObj180920)存入硬碟
而非父類別型態(Object)
當我更新版本後(180925)
我期望我的反序列化能根據 myObjType 轉型成正確的過往類別
而不用每次都做轉型判斷
switch (myObj.GetType().Name)
{
case "MyObj180920":
break;
case "MyObj180925":
break;
}
但是我不會用根據System.Type做轉型指令,有人知道要怎麼用嗎?
感謝大家撥冗觀看~