2017-02-02 3 views
0

Hallo, ich versuche, eine Datei seriliaze, aber ich habe ein sehr seltsames Problem .C# Serialisierung unbekannt Problem

Beim ersten Speichern werden alle Variablen korrekt serialisiert. Als nächstes bleiben viele Variablen leer andere werden gespeichert.

1 ° Serialisierungscode

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-Code

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

      } 

     } 

Einige der wichtigen Variablen wie

StartupMap, startX und startY.

nach dem Wert auf die Variable, Ich sehe Whit Debugger, alle Werte sind gespeichert.

enter image description here

i gesetzt Unterbrechungslinie zu speichern. und i Wert sehen sind in den variabile

nächsten, ich versuche, serialisiert zu öffnen jetzt Datei, und ich sehe dieser

enter image description here

Haltepunkt nach der Openproject-Methode gesetzt aufgerufen werden.

Wer weiß, was das Problem ist?

+2

Sie sind nicht die Variablen in der gleichen Reihenfolge zu lesen, dass Sie sich zu schreiben. – CodeCaster

+2

Versuchen Sie nicht, jedes Element abzufangen, wenn ein Element nicht (de) serialisiert werden konnte, wird es nicht mehr synchron laufen. Eine Datei kann deserialisiert werden oder nicht –

+1

Zuerst versuchen Sie, alle 'catch {}' zu entfernen. Sie machen sich offensichtlich blind mit ihnen. – Sinatr

Antwort

2

Sie serialisiert

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

und Sie deserialisieren wie:

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

die Folge von serialize und deserialize nicht Sie ist nicht korrekt auch versuchen, fangen setzen können, denn wenn irgendein Fehler serialize und auf jeder deserialisieren Artikel, wird Bestellungen ändern ...

versuchen serlize wie:

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); 

und deserialisieren wie:

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); 

mit richtigen Reihenfolge

+0

Tanks Emran aber jetzt habe ich ein neues Problem. Datei nicht gespeichert. Ich habe Breakpoint auf SaveMireProject Methode gesetzt, die neue Datei nicht gespeichert werden. alte Datei ist vorhanden ... –

+0

stellen Sie sicher, dass Sie SaveMireProject nicht in try Catch-Methode gesetzt haben, kann sein, dass try fangen wird Ausnahme erfassen –

+0

http://pastebin.com/05943Vnw –