前提・実現したいこと
現在C#でライブラリを作っています。
その中で、ノベルゲームなどであるセーブロードシステム、
そのうちのロードシステムを作ろうと思っているのですがなかなかうまくいきません。
一応使えるものもあるのですが、それだと汎用性に乏しくライブラリとしては不適切です。
以下がギリギリ動くコードです。
①セーブしたい情報が入ったクラス
C#
1public class SaveInformation 2{ 3 string saveInfo = "text"; 4}
②ロードの処理
C#
1// PathName: ファイル名 2public object Load(string PathName) 3{ 4 // データをバイナリー形式で管理する 5 var bf = new BinaryFormatter(); 6 // 指定したパス名でファイルを開く 7 var data = File.Open(PathName, FileMode.Open); 8 // データをデシリアライズ 9 var saveInfo = (SaveInformation)bf.Deserialize(data); 10 // ファイルを閉じる 11 data.Close(); 12 13 // 取得したものを返す 14 return saveInfo; 15}
③引き継ぐ際のコード
C#
1// 引き継ぎたい項目 2string get = ""; 3 4// 指定したファイル名でデータを処理 5var data = Load(PathName); 6 7// 保存したファイルに入っているデータを引き継げる 8get = data.text;
これを基に汎用性を高めるため②のスクリプトにクラス、もしくはクラス名をセットする為の引数を設置し、
var saveInfo = (SaveInformation)bf.Deserialize(data);
の部分にある、SaveInformationを別のものに置き換えたいです。
発生している問題・エラーメッセージ
このSaveInformationの部分を置き換える方法が本当に何も見つからない。
var saveInfo = (SaveInformation)bf.Deserialize(data);
試したこと
引数にclass
と設定するとclass名を決める処理が始まってしまったので、その部分をobjectに置き換え。
何でも受け取れるということで一見問題ないように見えたが、
'info' は 変数 ですが、種類 のように使用されています。
とエラー。なら明示的に変更を、と
var test = (class)info;
書いてみたが、失敗。
C#
1public object Load(string path, object info) 2{ 3 var bf = new BinaryFormatter(); 4 var data = File.Open(path, FileMode.Open); 5 6 // -------ERROR------- 7 // データをデシリアライズ 8 var saveInfo = (info)bf.Deserialize(data); 9 // ------------------- 10 11 data.Close(); 12 13 return saveInfo; 14}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/28 04:00