我想反序列化ListManager類型的對象,但嘗試時得到一個轉換錯誤。林不知道我做錯了什麼。二進制反序列化的泛型
我在
b.Serialize(fileStream, obj);
發送但是,試圖反序列化文件回到Listmanager我得到施展錯誤的實例時序列化對象就好了。該類被稱爲「AnimalManager」,並從ListManager繼承。該類包含Animal類型的對象列表。它怎麼會想要施放給動物,而不是Listmanager?
「AnimalManager」類型的對象不能轉換爲「Animal」類型的對象。
public static T OpenBin<T>(string filePath)
{
FileStream fileStream = null;
object obj;
try
{
if (!File.Exists(filePath)) throw new FileNotFoundException("The file" + " was not found. ", filePath);
fileStream = new FileStream(filePath, FileMode.Open);
var b = new BinaryFormatter();
obj = b.Deserialize(fileStream);
}
finally
{
fileStream?.Close();
}
return (T)obj;
}
[Serializable]
public class ListManager<T> : IListManager<T>
{
private List<T> _mList;
public ListManager()
{
_mList = new List<T>();
}
}
[Serializable]
public class AnimalManager : ListManager<Animal>
{
}
從Form1中調用:
private void button4_Click(object sender, EventArgs e)
{
var filepath = "test.bin";
if (manager.BinaryDeSerialize(filepath))
{
MessageBox.Show("hhohjo");
}
}
要ListManager實例(AnimalManager)
public bool BinaryDeSerialize(string fileName)
{
var test = BinSerializerUtility.OpenBin<T>(fileName);
return true;
}
你能告訴你的OpenBin的通話,以及您的序列? –
請閱讀[問]並提供[mcve]。你不是反序列化成你用來序列化的同一類型,或者你在某處搞亂了'T',但是我們不能從所示的代碼中分析這個。 – CodeCaster