反序列化(泛型)后转换为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;
}

反序列化(泛型)后转换为List

看起来你需要:

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); 
} 
相关文章: