こんにちは、私はファイルをseriliazeしようとするが、私は非常に 奇妙な問題があります。C#シリアライゼーションunknow問題
最初に保存すると、すべての変数が正しくシリアル化されます。 次に、多くの変数は空のまま残り、他の変数は保存されます。
1°シリアルコード
public void SaveMireProject(string projectName,string root_path)
{
BinaryFormatter bin = new BinaryFormatter();
using (FileStream _FileStream =
new FileStream(root_path + "\\" + projectName + ".mireprj", System.IO.FileMode.Create, FileAccess.Write))
{
//bin.Serialize(_FileStream, this);
bin.Serialize(_FileStream, Tiles);
bin.Serialize(_FileStream, project_name);
bin.Serialize(_FileStream, root_directory);
try { bin.Serialize(_FileStream, project_pat); } catch { }
try { bin.Serialize(_FileStream, project_type); } catch { }
bin.Serialize(_FileStream, Events);
bin.Serialize(_FileStream, Light);
bin.Serialize(_FileStream, StartupMap);
bin.Serialize(_FileStream, startX);
bin.Serialize(_FileStream, startY);
_FileStream.Close();
_FileStream.Dispose();
}
}
2°Deserilizationコード
public void OpenProject(string filename)
{
BinaryFormatter bin = new BinaryFormatter();
using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
Tiles = (List<_Tiles>)bin.Deserialize(fs);
project_name = (string)bin.Deserialize(fs);
root_directory = (string)bin.Deserialize(fs);
try { Events = (List<_ev>)bin.Deserialize(fs); } catch { Events = new List<_ev>(); };
try { Light = (List<_light>)bin.Deserialize(fs); } catch { Light = new List<_light>(); };
try { project_pat = (string)bin.Deserialize(fs); } catch { };
try { project_type = (string)bin.Deserialize(fs); } catch { };
try { StartupMap = (string)bin.Deserialize(fs); } catch { };
try { startX = (int)bin.Deserialize(fs); } catch { }
try { startY = (int)bin.Deserialize(fs); } catch { }
}
}
重要な変数のいくつかは
StartupMap、startxととstartYと同様です。
設定値をvariabileに設定した後、 ウィットデバッガが表示され、すべての値が保存されます。
私はラインを保存するためにブレークポイントを設定します。 と私は値を参照してください、次のvariabile
であり、私は、今、シリアライズされたファイルを開こう と私はOpenProjectメソッドの後に設定されたこの
ブレークポイントが呼び出されます。参照します
誰もが問題を知っていますか?あなたは
try { bin.Serialize(_FileStream, project_pat); } catch { }
try { bin.Serialize(_FileStream, project_type); } catch { }
bin.Serialize(_FileStream, Events);
bin.Serialize(_FileStream, Light);
をシリアル化し、あなたのようなデシリアライズ
で
。 – CodeCaster
各要素を試したりキャッチしたりしないでください.1つの要素をシリアライズできないと、同期が外れます。ファイルをデシリアライズすることができますか? –
すべての 'catch {}'を削除しようとします。あなたは明らかに彼らと盲目的になります。 – Sinatr