ListManager型のオブジェクトを逆シリアル化しようとしていますが、試行時にキャストエラーが発生します。私は間違って何をしているのかわからない。ジェネリックをバイナリ逆シリアル化
私は
b.Serialize(fileStream, obj);
に送信する。しかし、私はバックキャストエラーを取得するのListManagerのインスタンスにファイルをデシリアライズしようとしたときでわずか罰金オブジェクトをシリアル化。クラスは "AnimalManager"と呼ばれ、ListManagerから継承されます。このクラスには、Animal型のオブジェクトのリストが含まれています。どのようにListmanagerではなく、動物にキャストしたいのですか?
タイプ「AnimalManager」のオブジェクトは、タイプ「Animal」のオブジェクトに変換できません。
をForm1から呼び出す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>
{
}
:
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のあなたの通話だけでなく、あなたのシリアライズを表示することができますか? –
[ask]を読んで[mcve]を入力してください。シリアライズしたのと同じ型にデシリアライズするのではなく、 'T 'をどこかに混乱させていますが、これをコードから解析することはできません。 – CodeCaster