Entwickler-Ecke

IO, XML und Registry - Klasse ändern -> Auswirklung auf XML-Datei


Csharp-programmierer - Fr 27.05.16 17:45
Titel: Klasse ändern -> Auswirklung auf XML-Datei
Hallo,
also ich habe eine Klasse wie z.b.

C#-Quelltext
1:
2:
public string Name {get; set;}
public string Vorname{get; set;}


Wenn ich diese Version der Anwendung veröffentliche, der Kunde so einige Xml-Dateien erstellt und diese Daten in eine ListView eingespeist werden und ich ein neues Update herausbringe, wo ich der Klasse noch public int Alter {get; set;} hinzufüge. Bleiben dann alle Daten erhalten, oder wie verhält sich der XmlSerializer darauf?


Ralf Jansen - Fr 27.05.16 17:57

Das mag jetzt wenig hilfreich klingen aber das hast du in ein paar Minuten ausprobiert. Die Erfahrung gemacht zu haben ist wesentlich hilfreicher als wenn wir dir das erzählen.
Danach können wir ja überlegen wie man damit umgeht.


Csharp-programmierer - Fr 27.05.16 18:33

Also ich habe es jetzt mal versucht. Die Frage kommt eigentlich daher, dass ich in einem Update die Finanzfunktion noch verbessern muss, in dem ich der Klasse noch weitere Felder hinzufüge. Hier mal ein XML-Beispiel:


XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
<?xml version="1.0"?>
<IO_Klasse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <_klasse>
    <Klasse>
      <Name>Hallo</Name>
      <Vorname>Test</Vorname>
      <Alter />
    </Klasse>
    <Klasse>
      <Name>Hallo</Name>
      <Vorname>Test</Vorname>
      <Alter>12</Alter>
    </Klasse>
  </_klasse>
</IO_Klasse>


So. Was meint ihr, wenn ich beispielsweise mit der Finanzklasse, die sich im Update ändert, Berechnungen durchführe, dürfte sich ja eigentlich kein Fehler durchschleichen, oder?


Ralf Jansen - Fr 27.05.16 19:27

Wenn du nur Felder hinzu zufügst oder entfernst solltest du sicher sein. (Ich hoffe du hast das tatsächlich ausprobiert!)
Du brauchst aber natürlich hier und da eventuell Tests ob die gelesene Daten Sinn machen.

Beispiel: Du fügst tatsächlich das Feld Alter hinzu liest aber eine alte Xml Datei ein die Alter noch nicht hat. Dann wird die Property Alter nicht angefasst und steht auf dem default Wert. Du musst also im Code irgendwo auf das Alter prüfen und feststellen das Alter = 0 auch ein nicht existentes Alter bedeuten kann und nicht das gültige Alter 0. Du kannst nicht existent von Alter = 0 in der xml nicht unterscheiden. Wenn also Alter = 0 ein gültiger Wert ist musst du dir was überlegen.
Übrigens klingt eine Alter Property falsch. Alter ist üblicherweise was was sich von selbst ändert. Einfach so durch warten ;) Speichern sollte man nur Daten (oder in einer Form) die sich nicht von selbst ändern.