Announcement

Collapse
No announcement yet.

Fehlermeldung bei Deserialize

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fehlermeldung bei Deserialize

    Habe folgendes geschrieben:

    private struct meineDaten
    {
    public string var_1;
    public string var_2;
    }
    ...
    meineDaten test = new meineDaten();
    meineDaten test2 = new meineDaten();
    MemoryStream myFileStream = new MemoryStream();
    BinaryFormatter serializer = new BinaryFormatter();

    meineDaten.var_1 = "variable1";
    meineDaten.var_2 = "variable2";
    serializer.Serialize(myFileStream, meineDaten);

    Soweit so gut. Wenn ich aber sofort schreibe:

    test2 = (meineDaten) serializer.Deserialize(myFileStream);

    also eigentlich das Ganze rückwärts, bekomme ich folgende Fehlermeldung:
    <Das Streamende wurde erreicht, bevor die Verarbeitung abgeschlossen wurde.>

    Wie kann ich denn nun den MemoryStream wieder in eine Struktur umwandeln?

    Danke.

  • #2
    Grüß Dich,
    eigentlich ist es ganz einfach, bin aber auch erst nicht darauf gekommen. Ich wollte den Stream ständing schließen :P. Wenn Du in einen Stream schreibst, ist es in der Regel so, dass ein Cursor immer zur nächsten Position wandert (Deswegen sind ja auch Funktionen wie Peek() nötig). Das heißt, wenn Du Deinen NOCH offenen Stream gleich wieder Lesen willst, steht dieser Cursor am Ende des Stream (ist ja auch logisch. Wenn er jetzt am Anfang stehen würde, und Du nochmal in den Stream etwas anfügen möchtest, würdest Du die bisherigen Daten vernichten). Das Deserialize ist jetzt nicht so schlau und setzt den Cursor automatisch zurück (Besser so ).

    Lösung des Ganzen ist sehr einfach. Nachdem Du in den Stream geschrieben hast, musste DIESEN Cursor auch wieder zurücksetzen. Sinnigerweise indem Du das Property Position aus "myFileStream" auf 0 stellst. Bei Dir sieht das im Beispiel dann wie folgt aus:<br><br>
    [Serializable]
    {
    public string var_1;
    public string var_2;
    }
    ...
    meineDaten test = new meineDaten();
    meineDaten test2 = new meineDaten();
    MemoryStream myFileStream = new MemoryStream();
    BinaryFormatter serializer = new BinaryFormatter();
    meineDaten.var_1 = "variable1";
    meineDaten.var_2 = "variable2";
    serializer.Serialize(myFileStream, meineDaten);
    <b><span style="color:blue">//genau diese Zeile musste hinzufügen, dann funktioniert es
    myFileStream.Position = 0;</span></b><br>
    test2 = (meineDaten) serializer.Deserialize(myFileStream);<br><br>
    Gruß

    Markus Seidl

    PS: Sorry für den langen Post aber ich möchte den Leuten auch immer gern erklären warum etwas so ist wie es ist , sonst bringts nicht wirklich was. Ich hoffe es hilft

    Comment


    • #3
      Hallo und danke. Jetzt gehts

      Comment

      Working...
      X