Wenn ich ein Objekt serialisieren möchte, muss ich [Serializable]
Attribut verwenden und alle Mitgliedsvariablen werden in die Datei geschrieben. Was ich nicht weiß, wie man z. Wenn ich eine neue Mitgliedsvariable hinzufüge (eine Variable umbenenne oder einfach eine Variable entferne) und dann die Datei öffne (Deserialisierung), wie kann ich die Objekt-/Dateiversion bestimmen, damit ich das neue Mitglied korrekt einstellen oder eine Art von Migration durchführen kann? Wie kann ich feststellen, dass die Variable während des Ladens initialisiert wurde oder nicht (ignoriert von Deserializer).Serialisierung und Objektversionierung in C#
Ich weiß, dass es versionstolerante Ansätze gibt und ich kann Variablen mit [OptionalField(VersionAdded = 1)]
Attribut markieren. Wenn ich eine alte Datei öffne, ignoriert das Framework diese optionale (neue Variable) und es wird nur null/null sein. Aber wieder wie kann ich feststellen, ob die Variable durch Laden initialisiert oder ignoriert wurde.
Ich kann die Klassen-/Objektversionsnummer in den Stream schreiben. Verwenden Sie die Methode ISerializable
und lesen Sie in der constructor(SerializationInfo oInfo, StreamingContext context)
Methode diese Versionsnummer. Dies sagt mir genau, was die Klassenversion im Stream ist.
Allerdings habe ich erwartet, dass eine solche Versionierung bereits durch das Streaming-Framework in C# implementiert ist. Ich habe versucht, die Assembly-Version von der SerializationInfo
zu erhalten, aber es wird immer auf die aktuelle Version und nicht auf die Version eingestellt, die beim Speichern des Objekts verwendet wurde.
Was ist der bevorzugte Ansatz? Ich fand eine Menge von Artikeln auf dem Netz, aber ich konnte nicht eine gute Lösung für diese, die Versionierung Adressen ...
Jede Hilfe ist willkommen Danke, Abyss
+1 für den Vorschlag, einen anderen Ansatz als .NET-Serialisierung zu verwenden. – Theraot