Serialisierung und Objektversionierung in C #
Wenn ich ein Objekt serialisieren möchte, muss ich verwenden[Serializable]
Attribut und alle Mitgliedsvariablen werden in die Datei geschrieben. Was ich nicht weiß, wie man eine Versionierung durchführt, z. Wenn ich eine neue Mitgliedsvariable hinzufüge (eine Variable umbenenne oder nur eine Variable entferne) und dann die Datei öffne (deserialisiere), wie kann ich dann die Objekt- / Dateiversion bestimmen, damit ich das neue Mitglied korrekt festlegen oder eine Art Migration durchführen kann? Wie kann ich feststellen, dass die Variable während des Ladens initialisiert wurde oder nicht (vom Deserializer ignoriert)?
Ich weiß, dass es versionstolerante Ansätze gibt und ich kann Variablen mit markieren[OptionalField(VersionAdded = 1)]
Attribut. Wenn ich eine alte Datei öffne, ignoriert das Framework diese optionale (neue Variable) und sie ist nur null / null. Aber auch hier kann ich feststellen, ob die Variable durch Laden initialisiert oder ignoriert wurde.
Ich kann die Versionsnummer der Klasse / des Objekts in den Stream schreiben. Verwenden Sie dieISerializable
Ansatz und in derconstructor(SerializationInfo oInfo, StreamingContext context)
Methode lesen Sie diese Versionsnummer. Dies wird mir genau sagen, was die Klassenversion im Stream ist.
Allerdings habe ich erwartet, dass eine solche Versionierung bereits vom Streaming-Framework in C # implementiert wird. Ich habe versucht, die Assembly-Version von der zu erhaltenSerializationInfo
Es wird jedoch immer auf die aktuelle Version gesetzt, nicht auf die Version, die beim Speichern des Objekts verwendet wurde.
Was ist der bevorzugte Ansatz? Ich habe viele Artikel im Internet gefunden, aber ich konnte keine gute Lösung dafür finden, die sich mit der Versionsverwaltung befasst ...
Jede Hilfe ist dankbar Danke, Abyss