我想反序列化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