Objekte serialisieren und wo anders Deserialisieren

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Wolf066.

    Objekte serialisieren und wo anders Deserialisieren

    Hallöle :D

    Ich bins mal wieder und hab ne kleine Frage...

    Ich habe eine kleine Klasse geschrieben, wo ein paar Sachen drin sind:

    C#-Quellcode

    1. using LetsPlayTool.Tutorial.Tutorials;
    2. using System;
    3. using System.Collections.Generic;
    4. using System.IO;
    5. using System.Linq;
    6. using System.Runtime.Serialization.Formatters.Binary;
    7. using System.Text;
    8. using System.Threading.Tasks;
    9. namespace LetsPlayTool.Tutorial.Tutorials
    10. {
    11. [Serializable]
    12. public class Tutorial
    13. {
    14. public List<TutorialCard> Cards = new List<TutorialCard>();
    15. public string title { get; set; }
    16. /// <summary>
    17. /// Lädt ein Tutorial
    18. /// </summary>
    19. /// <param name="path"></param>
    20. /// <returns></returns>
    21. public Tutorial load(string path)
    22. {
    23. Tutorial newt = new Tutorial();
    24. FileStream FS = new FileStream(path, FileMode.Open);
    25. BinaryFormatter BF = new BinaryFormatter();
    26. newt = (Tutorial)BF.Deserialize(FS);
    27. FS.Dispose();
    28. return newt;
    29. }
    30. /// <summary>
    31. /// Speicher die Einstellungen
    32. /// </summary>
    33. public void save(string path)
    34. {
    35. string pfad = path + "\\" + title + ".tut";
    36. FileStream FS = new FileStream(pfad, FileMode.Create);
    37. BinaryFormatter BF = new BinaryFormatter();
    38. BF.Serialize(FS, this);
    39. FS.Dispose();
    40. }
    41. }
    42. }


    Außerdem habe ich 2 Projekte (die 2 Projekte sind in der selben Projektmappe) wo ich diese Klasse verwenden möchte. Also hab ich sie in einem Projekt erstellt und dann per Link mit dem anderen Verlinkt.
    Wenn ich jetzt aber über save() Methode ein Objekte serialisieren möchte, kann ich es in dem anderen Projekt mir der selben Klasse über die Load() Methode nicht mehr deserialisiern...

    Folgender Fehler:

    C#-Quellcode

    1. Ein Ausnahmefehler des Typs "System.Runtime.Serialization.SerializationException" ist in mscorlib.dll aufgetreten.
    2. Zusätzliche Informationen: Die Assembly "LetsPlayToolTutorialBuilder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" kann nicht gefunden werden.


    Weiß jemand wie ich das lösen kann?

    LG Freddy

    Wolf066 schrieb:

    Weiß jemand wie ich das lösen kann?
    Das Serialisieren / Deserialisieren ist streng reglementiert.
    Das System prüft, ob hin und rück tatsächlich dieselbe Klasse (de)serialisiert wird.
    Du musst insbesondere die zu serialisierende Klasse beim Schreiben und Lesen im selben Namespace liegen haben, nimm also am besten denselben Code in beiden Projekten und keinen Link auf ne DLL.
    Füge also diesen Code und den Code der Klasse TutorialCard in beiden Projekten ein, es kann ja dieselbe Datei sein.
    Oder
    die Klassen Tutorial und TutorialCard befinden sich in einer DLL, die von beiden Projekten genutzt wird (das wäre die bessere Lösung).
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Wolf066 Jou.
    Datei => Hinzufügen => Neues Projekt
    Klassenbibliothek => NAME VORGEBEN
    beide PUBLIC Klassen einfügen
    dieses Projekt den anderen beiden Projekten als Verweis hinzufügen (nicht aber die DLL als solche)
    Kompilieren, drauf zugreifen
    feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ok hab sie jetzt in so ein Projekt gepackt und das meinem eigentlichen Projekt hinzugefügt. Allerdings bekomme ich den Fehler, dass

    C#-Quellcode

    1. ​Der Typ- oder Namespacename "Bitmap" wurde nicht gefunden (fehlt eine using-Direktive oder ein Assemblyverweise?)
    Aber dafür gibts kein Using...
    Wie kann ich in meiner Klasse dann n Bitmap speichern? Geht das überhaupt?

    Danke xD LG Freddy
    @Wolf066 Initial ist eine DLL ohne GUI-Verweise. Du musst nun die erforderlichen Verweise (DLLs vom Framework) hinzufügen.
    Hier: System.Drawing.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ok also nochmal xD Nur für mich...

    Ich mach so ne Klassenbibliothek... kopier da die beiden Klassen rein, lösche die Standard Klasse und füge dann das ganze Projekt per Verweis meinem anderen hinzu?

    Ach und System.Drawing kann ich irgendwie nicht hinzufügen... Das wird grün unterkringelt und der Fehler bleibt bestehen...

    Wolf066 schrieb:

    System.Drawing
    musst Du die DLL dem DLL-Projekt als Verweis hinzufügen:


    das DLL-Projekt als Veweis hinzufügen:

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!