So speichern Sie den Status eines C# - app laden zu können später
Ich habe ein Programm, in dem der Benutzer fügt mehrere Objekte zu einer Szene. Diese Objekte sind alle vertreten, die als Klassen.
Jetzt möchte ich die Benutzer in der Lage sein, um das Szenario zu speichern, es kann also wieder geladen werden.
Gibt es einige genereic save-Methode, die ich verwenden kann, oder muss ich das schreiben meiner eigenen, speichert die Werte aller Eigenschaften und so und dann erstellen Sie neue Objekte und legen Sie die gespeicherten Werte in Sie ein, wenn der Benutzer lädt das Szenario wieder.
/P
Edit: Danke für die schnellen Antworten Jungs.
Ich bin eigentlich die Speicherung von default-Werten für die Objekte in einer SQL compact 3.5-Datenbank jetzt. Also, wenn jemand weiß, wie zu serialisieren zu SQL, das wäre toll info.
Edit 2: nochmals vielen Dank! Ich werde serialisieren nach xml, dann speichern Sie es als string an die SQL-Datenbank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, Ihre Objekte haben alle Werte, die als öffentliche Eigenschaften, die Sie verwenden können, eine XMLSerializer zu konvertieren Sie das Objekt in einen XML-string, dann verwenden Sie eine XMLDeserializer, um das Objekt neu erstellen.
Gibt es eine Erweiterung Methode um dies zu erreichen hier.
Wenn Sie private Variablen, können Sie immer noch schreiben Sie Ihre eigenen benutzerdefinierten serialisieren/Deserialisieren Methoden.
Bearbeiten in Reaktion auf die ursprüngliche Frage Bearbeiten:
Können Sie diesen Serialisierung Techniken zum speichern der Zeichenfolge in eine Datenbank. Eine andere Möglichkeit wäre die Verwendung eines ORM (Object Relational Mapper), um die Lücke zwischen Ihren Objekten und Datenbanken.
Normalerweise würde man mit einer Datenbank zu tun diese Art der Sache. Das ist wohl die empfohlene Praxis.
Allerdings, wenn Sie möchten, eine quick-and-dirty-Methode können Sie serialise, um Xml-oder Binären mit relativ wenig code. Überprüfen Sie heraus das System.- Laufzeit.Serialisierung Zeug. Der trade-off von Xml-oder Binär -, ist, dass die Versionierung saugt große Zeit.
Betrachten Sie eine Sammlung von xml-Dateien mit Objekten aus der 1.0 app. Wenn Sie Felder Hinzugefügt haben, um jene Objekte, die seit der 1.0 dann Sie werden nicht kompatibel mit jeder neuen 1.1 Objekte. Um dies zu umgehen, müssen Sie schreiben eine manuelle update-Sequenz von Typ 1.0 -> 1.1. Noch schlimmer, wenn Sie die Verwendung der autodiscovery-Codes (die automatisch serialises), wie Sie xml-oder binäre Serialisierungsprogramm vielleicht haben Sie sogar den Namen Ihrer Objekte unterschiedliche Namen Product1 /Product1.1 /etc, es ist entweder das, oder schreiben Sie Ihren eigenen code serialisieren.
Wenn Ihr die app startet, nähert sich jede Stufe der Ernsthaftigkeit würde ich sagen Sie werden wahrscheinlich wollen, um eine Datenbank verwenden. SqlLite ist sehr schön und einfach für 1 Benutzer-apps, etwas größer, und Sie will ein richtiges RDBMS.
Werden Sie brauchen, zu betrachten .NET-Serialisierung, das ist ein großes Thema. Hier ist ein einführendes tutorial.
Könnten Sie auch einen Blick auf db4o, das ist ein einfaches Objekt-Datenbank.
.NET-Serialisierung ist der einfachste Weg, dies zu tun, obwohl die Versionsverwaltung kann ein problem sein, wie erwähnt wurde. Dies kann nicht ein großes problem, je nachdem wie kompliziert Ihre Objekte sind. Ihr Serialisierung/Deserialisierung Logik muss intelligent genug sein, um Fälle zu behandeln, wo Attribute fehlen, oder haben Standardverhalten für neue Attribute, die nicht vorhanden waren im serialisierten Objekte serialisiert, die mit älteren Versionen. Vor allem diese behandelt werden, durch den Fang SerializationExceptions und den Umgang mit Ihnen gibt.
Ich denke, Sie hätte dieses problem mit einer Datenbank zu - außer, dass ich denke, es behandelt werden würde, durch was auch immer Methode, die Sie verwenden, um die Migration bestehender Datenbanken auf die neueste version (d.h. das hinzufügen einer neuen Spalte zu einer RDBMS-Tabelle oder ein Attribut zu ODBMS-Objekte).