反序列化(泛型)后转换为List
本文关键字:转换 List 泛型 反序列化 | 更新日期: 2023-09-27 18:11:56
我有一个二进制序列化到文件的List,但是当我要反序列化文件时,我得到下面的编译错误:
我不是特别熟悉在不同的类之间转换泛型。
方法' utiliteslibrary . binserialize . binaryfiledeserialize (string)'的类型参数不能从用法中推断出来。尝试显式指定类型参数。
代码//Class myManager
public void DeserializeAnimals(string filePath)
{
m_animalList = (List<Animal>) BinSerialization.BinaryFileDeserialize(filePath);
}
//Class BinSerializer
public static T BinaryFileDeserialize<T>(string filename)
{
T objectSerialize;
Stream stream = null;
try
{
stream = File.Open(filename, FileMode.Open);
BinaryFormatter bFormatter = new BinaryFormatter();
objectSerialize = (T)bFormatter.Deserialize(stream);
}
catch (FileNotFoundException) { objectSerialize = default(T); }
finally
{
if (stream != null)
stream.Close();
}
return objectSerialize;
}
看起来你需要:
m_animalList = BinSerialization.BinaryFileDeserialize<List<Animal>>(filePath);
泛型可以从参数推断,但不能从返回值推断。这就是为什么一个类似的方法:
void Serialize<T>(string filePath, T value)
可以称为
Serialize(path, m_animalList);
,因为这里m_animalList
的类型(编译器知道)可以帮助解析T
。上面这行(在本例中)与:
Serialize<List<Animal>>(path, m_animalList);
不过,我也要警告BinaryFormatter
可能会咬你的路-它是不是非常版本容忍。
我认为错误在这一行,它应该是:
public void DeserializeAnimals(string filePath)
{
m_animalList = BinSerialization.BinaryFileDeserialize<List<Animal>>(filePath);
}