为什么我在这里得到例外?我不能正确地投射吗?

时间:2017-03-22 22:31:37

标签: c# file serialization io

当我运行时:

public List<Animal> LoadFromFile()
    {
        // DECLARING ITEMS FOR FILE MANIPULATION
        fs = new FileStream(FileName, FileMode.Open, FileAccess.Read);
        bf = new BinaryFormatter();
        List<Animal> tempList = new List<Animal>();

        // DE-SERIALIZING

        while (fs.Position < fs.Length)
        {
            Animal p = (Animal)bf.Deserialize(fs);
            tempList.Add(p);
        }

            return tempList;
    }

我得到System.InvalidCastException类型的异常,说:

无法将类型为'System.Collections.Generic.List`1 [AnimalShelterManager.Animal]'的对象强制转换为'AnimalShelterManager.Animal'。

这是什么意思?括号之间的内容实际上是我希望它在反序列化时强制转换的类型。包含列表和Animal类的类以及从中继承的 所有[Serializable]

1 个答案:

答案 0 :(得分:1)

错误:

  

无法投射类型的对象   'System.Collections.Generic.List`1 [AnimalShelterManager.Animal]'到   输入'AnimalShelterManager.Animal'。

说的一切。您正在将Animal的列表转换为Animal,您的反序列化将返回一个项目列表,其中可能包含一个Animal元素。调试代码并确保这一点并使用FirstOrDefault()在转换之前获取第一个元素。