2017-02-02 4 views
0

こんにちは、私はファイルを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に設定した後、 ウィットデバッガが表示され、すべての値が保存されます。

enter image description here

私はラインを保存するためにブレークポイントを設定します。 と私は値を参照してください、次のvariabile

であり、私は、今、シリアライズされたファイルを開こう と私はOpenProjectメソッドの後に設定されたこの

enter image description here

ブレークポイントが呼び出されます。参照します

誰もが問題を知っていますか?あなたは

try { bin.Serialize(_FileStream, project_pat); } catch { } 
try { bin.Serialize(_FileStream, project_type); } catch { } 
bin.Serialize(_FileStream, Events); 
bin.Serialize(_FileStream, Light); 

をシリアル化し、あなたのようなデシリアライズ

+2

Tiles = (List<_Tiles>)bin.Deserialize(fs); project_name = (string)bin.Deserialize(fs); root_directory = (string)bin.Deserialize(fs); project_pat = (string)bin.Deserialize(fs); project_type = (string)bin.Deserialize(fs); Events = (List<_ev>)bin.Deserialize(fs); Light = (List<_light>)bin.Deserialize(fs); StartupMap = (string)bin.Deserialize(fs); startX = (int)bin.Deserialize(fs); startY = (int)bin.Deserialize(fs); 

。 – CodeCaster

+2

各要素を試したりキャッチしたりしないでください.1つの要素をシリアライズできないと、同期が外れます。ファイルをデシリアライズすることができますか? –

+1

すべての 'catch {}'を削除しようとします。あなたは明らかに彼らと盲目的になります。 – Sinatr

答えて

2

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 { }; 

シリアル化およびデシリアライズのシーケンスは、何らかの障害シリアライズ場合とすると、それぞれの上にデシリアライズするので、あなたは、またトライキャッチを置くことができない修正されていません

:のような項目は、注文を変更します...

トライserlize

bin.Serialize(_FileStream, Tiles); 
bin.Serialize(_FileStream, project_name); 
bin.Serialize(_FileStream, root_directory); 
bin.Serialize(_FileStream, project_pat); 
bin.Serialize(_FileStream, project_type); 
bin.Serialize(_FileStream, Events); 
bin.Serialize(_FileStream, Light); 
bin.Serialize(_FileStream, StartupMap); 
bin.Serialize(_FileStream, startX); 
bin.Serialize(_FileStream, startY); 

と同様にデシリアライズ:あなたはあなたがそれらを書いているのと同じ順序で変数を読んでいない、正しい順序

+0

タンクEmranしかし、今私は新しい問題があります。 ファイルは保存されません。 SaveMireProjectメソッドにブレークポイントを設定しました。 新しいファイルが保存されません。古いファイルが存在しています... –

+0

SaveMireProjectをtryキャッチメソッドに入れていないことを確認してください。例外キャッチを試みる可能性があります。 –

+0

http://pastebin.com/05943Vnw –

関連する問題