Speichern und Verwalten von serialisierten Objekten in C #

8

Was sind die Best Practices zum Speichern und Verwalten von serialisierten Objekten in C #? Irgendwelche Strategien oder Muster, die zutreffen?

Was ich bisher geglaubt habe, ist Folgendes:

  • Bevorzugen Sie Json gegenüber XML, sowohl hinsichtlich des Speicherplatzes als auch der Geschwindigkeit. XML ist jedoch einfacher, Daten über LINQ to XML für größere Datenmengen abzufragen / abzubauen.
  • Ordnen Sie für jede einzelne Eigenschaft explizit einem serialisierten Namen zu. Wenn Sie in Zukunft eine Eigenschaft umbenennen müssen, werden Ihre serialisierten Daten nicht beschädigt. Attribute helfen dabei.
  • Speichern Sie Versionsinformationen auf dem serialisierten Objekt, falls Sie in Zukunft Daten massenmigrieren müssen

Update: (das habe ich auf die harte Tour herausgefunden)

  • Speichern Sie alle Datenzeiten in der gesamten Anwendung und in allen Versionen einheitlich. Sowohl hinsichtlich Format als auch Zeitzone.
Mihalis Bagos
quelle
Welche Operationen werden mit diesen serialisierten Daten durchgeführt? Nur lesen / schreiben oder etwas komplexeres?
Euphoric
Es ist eher eine allgemeine Frage, aber in meinem Fall muss ich kleine Einstellungsobjekte speichern, die möglicherweise aktualisiert werden oder nicht.
Mihalis Bagos
2
4. Befolgen Sie die Regeln, bis es sinnvoller ist, die Regeln zu brechen.
Robert Harvey
1
Was meinst du? Was sind "die Regeln" in diesem Fall?
Mihalis Bagos

Antworten:

9

Ich habe im Laufe der Jahre ziemlich viel Serialisierung durchgeführt. Hier sind einige Dinge, die wir uns ausgedacht haben:

  • Bevorzugen Sie lesbare Formate gegenüber binären Formaten. Im Allgemeinen würde ich Xml Json vorziehen, hauptsächlich weil Sie Xslt verwenden können, um Xml zu transformieren, wenn Sie die Version aktualisieren müssen.

  • Unabhängig davon, als was Sie serialisieren, sollten die Deserialisierungslogik und der Datenspeicher die Versionierung der serialisierten Daten ermöglichen. Versionsinformationen sollten wahrscheinlich außerhalb der serialisierten Daten liegen, was es etwas einfacher macht, die richtige Deserialisierungsstrategie zu finden und auszuwählen.

  • Bei Ihrer Serialisierung sollten Komponententests in beide Richtungen ausgeführt werden. IE, Sie sollten einen Test haben, der die Daten deserialisiert und bestätigt, dass Sie alles korrekt importiert bekommen. Und Sie sollten etwas haben, das die Daten serialisiert und bestätigt, dass sie als korrektes json und xml ausgegeben werden.

  • Wenn der Punkt dieser Serialisierung plattformübergreifend ist, testen Sie gegen die andere Plattform. Wahrscheinlich kein so großes Problem, wie die Plattformen ausgereift sind, aber es gab Zeiten, in denen sich die Dinge nicht darüber einig waren, wie JSON formatiert werden sollte.

Wyatt Barnett
quelle
4

Erwähnte Punkte sind praktisch und gut zu beachten. Ich möchte verschiedene Arten von Serialisierungen erwähnen, die je nach Ihren Anwendungsanforderungen hilfreich sein können.

  • Binäre Serialisierung - es verwendet Binärkodierung kompakte Serialisierung für Verwendungen , wie beispielsweise zur Herstellung storageoder socket-based network Ströme.
  • XML-Serialisierung - Serialisiert die öffentlichen Felder und Eigenschaften eines Objekts oder die Parameter und Rückgabewerte von Methoden in einen XML-Stream, der einem bestimmten XSD-Dokument (XML Schema Definition Language) entspricht. Weitere Informationen finden Sie im System.Xml.Serialization-Namespace .
  • SOAP-Serialisierung - Dies ist eine andere Variante der XML-Serialisierung, bei der Objekte in XML-Streams serialisiert werden können, die der SOAP-Spezifikation entsprechen. SOAP ist ein auf XML basierendes Protokoll, das speziell für den Transport von Prozeduraufrufen mithilfe von XML entwickelt wurde. Wie bei der regulären XML-Serialisierung können Attribute verwendet werden, um die von einem XML-Webdienst generierten SOAP-Nachrichten im Literal-Stil zu steuern.

Weitere Informationen aus der offiziellen Quelle - MSDN C # -Programmierung

All dies müssen auch Praktiken innerhalb des SDLC-Prozesses sein (dh eine zu testende Umgebung, Versionskontrolle usw.).

Yusubov
quelle
Warum sollten Sie als Binär oder Seife speichern wollen? Soweit ich weiß, ist Seife überfüllt, um Datenkorruption zu vermeiden, was beim Speichern in einem bekannten System kein Problem darstellt.
Mihalis Bagos
1
Es geht um Geschwindigkeit, die schnellste ist die binäre Serialisierung.
Yusubov
Der BinaryFormatter ist auch die Option mit der geringsten Änderungstoleranz. Wir hatten endlose Probleme damit und wünschten jetzt, wir hätten es nie benutzt. Siehe: stackoverflow.com/a/703361/505697
HappyCat
Sicher, alles hat seine eigenen Probleme und hängt davon ab, wo es verwendet wird. Wie bereits erwähnt, ist dies aus Gründen der plattformübergreifenden Kompatibilität keine ideale Option. Hier setzt die XML-Serialisierung an.
Yusubov