So speichern / laden Sie die Klasseninstanz schnell in eine Datei

7

Ich habe mehrere Sammlungen von Klassen / Strukturen in meiner App.

Die Klasse ist nur eine Klasse mit Feldern

%Vor%

Und meine Sammlung

%Vor%

Ich muss _myList speichern und laden können. Ich möchte nur alle Klassenfelder in Datei speichern und laden. Ich möchte keine Zeit damit verbringen, meine eigenen Daten zu schreiben. Gibt es irgendwelche Werkzeuge in .NET, die mir helfen? Das Dateiformat interessiert mich nicht.

    
Captain Comic 24.11.2010, 12:39
quelle

6 Antworten

7

XMLSerializer ist nicht schwer zu verwenden. Solange deine Objekte nicht riesig sind, ist es ziemlich schnell. Ich serialisiere einige riesige Objekte in einigen meiner Apps. Es dauert ewig und die resultierenden Dateien sind fast 100 MB, aber sie sind editierbar, wenn ich ein paar Sachen optimieren muss. Außerdem ist es egal, ob ich Felder zu meinen Objekten hinzufüge. Die serialisierten Dateien der älteren Version des Objekts werden immer noch richtig deserialisiert. Ich mache die Serialisierung in einem separaten Thread, so ist es egal, wie lange es in meinem Fall dauert. Der Vorbehalt ist, dass Ihre A -Klasse einen Konstruktor für XMLSerialziation haben muss, um zu funktionieren.

Hier ist ein Arbeitscode, den ich zum Serialisieren / Deserialisieren verwende, wobei die Fehlerbehandlung zur besseren Lesbarkeit herausgerissen wurde ...

%Vor%     
Tim Coker 24.11.2010, 13:09
quelle
9

Ich habe gerade a geschrieben Blogbeitrag zum Speichern der Daten eines Objekts in Binary, XML oder Json ; Nun schreiben Sie ein Objekt oder eine Liste von Objekten in eine Datei. Hier sind die Funktionen, um es in den verschiedenen Formaten zu tun. Siehe meinen Blogbeitrag für weitere Details.

Binär

%Vor%

XML

Erfordert, dass die System.Xml-Assembly in Ihr Projekt eingefügt wird.

%Vor%

Json

Sie müssen einen Verweis auf die Newtonsoft.Json-Assembly einschließen, die Sie im Json.NET NuGet-Paket .

%Vor%

Beispiel

%Vor%     
deadlydog 15.03.2014 14:43
quelle
2

Es gibt viele Serialisierer:

Teil des .net-Frameworks

  • XmlSerializer (standardisiertes Format, langsam und ausführlich)
  • BinarySerializer (proprietäres Format, mittlere Geschwindigkeit, unterstützt zyklische Graphen , serialisiert Felder statt Eigenschaften = & gt; störende Versionierung )

Drittanbieter:

  • Json-Serializer (standardisiertes Format, textbasiert, kürzer als xml)
  • ProtoBuf-Serializer (standardisiertes Format, binär, sehr schnell)

Ich würde wahrscheinlich einen ProtoBuf-Serializer verwenden, wenn die Datei binär sein könnte, und einen JSON-Serialisierer, wenn es ein einfacher Text sein muss.

    
CodesInChaos 24.11.2010 12:44
quelle
1

Sie können Ihre List<> mit XML Serializer oder Binary Serializer serialisieren und die serialisierte Liste in einer Datei speichern.

Später können Sie diesen Dateiinhalt lesen und Ihre ursprüngliche Liste abrufen.

Machen Sie Ihren Typ, für den Sie die Liste [Serializable]

erstellen     
TalentTuner 24.11.2010 12:55
quelle
1

Ich benutze normalerweise den XML-Serilizer, bin schnell, einfach zu implementieren und halte die Objekte in einer gut lesbaren Weise, man sieht ein schönes Beispiel .

Sie können eine binäre Serialisierung verwenden, wenn Sie eine effektivere Lösung mit größerer Größe wünschen. (Zum Beispiel, wenn Sie die Serialisierung über ein Netzwerk übertragen möchten.)

BEARBEITEN: Um mehr Kontrolle über die Elemente zu erhalten, die Sie serialisieren, werfen Sie einen Blick auf diese Beispiel

    
SubniC 24.11.2010 12:45
quelle
1

Altes Thema, aber ich habe die obige Antwort von Tim Coker geändert, um die verwendeten Blöcke zu verwenden, um die Stream-Objekte ordnungsgemäß zu entfernen und nur eine einzelne Klasseninstanz zu speichern:

%Vor%     
AnthonyOSX 20.02.2015 21:47
quelle

Tags und Links