Laden...

komplexe Klasse in XML speichern? [==> serialisieren]

Erstellt von moelski vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.251 Views
M
moelski Themenstarter:in
183 Beiträge seit 2011
vor 13 Jahren
komplexe Klasse in XML speichern? [==> serialisieren]

Moin !

Ich habe in meiner Anwendung eine Klasse die ich als eine Art Container nutze:

    class Mapping
    {
        public IOType EntityType;
        public TableNode Entity   { get; set; }
        public IInOut    EBC      { get; set; }
        public Input_Serial InputSer { get; set; }
        public Input_TCP InputTCP { get; set; }

        public SyncQueue<DATA> InputQueue { get; set; }
        public SyncQueue<DATA> OutputQueue { get; set; }

        public ChartForm OutForm { get; set; }
    }

Von dieser Klasse erzeuge ich Instanzen die ich gerne abspeichern würde (bzw. die wichtigen Teile davon).

Einige Elemente wie das Entity müssen nicht gespeichert werden und bei einigen (z.B. InputSer) müsste ich nur den Port (InputSer = SerialPort) abspeichern.

Wie würde man da am besten ran gehen?

Meine derzeitige Idee wäre, dass alle Elemente (die meisten sind ja selber Klassen) ein Interface mitbekommen. Durch das Interface müsste dann jedes Element eine Save Methode implementieren. Diese rufe ich dann für alle Elemente auf und dort wird eben alles relevante gespeichert.

Aber evtl. kann man das auch eleganter lösen?

Grüße Dominik

Greetz Dominik

Gelöschter Account
vor 13 Jahren

XML-Serialisierung ist hier das Standardvorgehen. Diese lässt sich sehr granular modifizieren.

M
moelski Themenstarter:in
183 Beiträge seit 2011
vor 13 Jahren

Moin !

Das habe ich mir fast gedacht ...

Muss ich dann das ISerializable Interface bedienen um anzugeben was ich serialisieren will und was nicht?

Greetz Dominik

Gelöschter Account
vor 13 Jahren

Nein. Das steuern geht bequem über Attribute. Nur wenn die Attribute in seltenen Fällen zu unflexibel sind, muss das Interface her.

Google mal nach "XML serialisierung c#"

M
moelski Themenstarter:in
183 Beiträge seit 2011
vor 13 Jahren

Ok Danke derweil. 👍

Werde mich mal durchbeissen und ggf. nochmal nachfragen.

Greetz Dominik

M
moelski Themenstarter:in
183 Beiträge seit 2011
vor 13 Jahren

Moin !

So ich habe die Serielisierung soweit am laufen. 👍

allerdings hät ich da noch ne kleine Frage zu ...
Ich habe in meinem Formular eine Liste die ich Serialisieren will:

    public partial class Form1 : Form
    {
        public List<Mapping> Liste = new List<Mapping>();
....

Die Seialisierung klappt, aber die Namensgebung nicht so richtig ...

Es fängt an mit der Liste. Im XML steht dann:

<ArrayOfMapping xmlns:x....

Wie kann ich denn den Namen anpassen? Ist jetzt nur Kosmetik, aber das klappt nicht so Recht ...
Ich habe es so probiert:

    [XmlArray("products")]
    [XmlArrayItem("product")]
     public List<Mapping> Liste = new List<Mapping>();

Das ändert aber nix.

Auch die elemente der Liste heissen <Mapping> also so wie meine Mapping Instanzen die ich in der Liste ablege.
Kann man den Namen evtl. auch beeinflussen?

Grüße Dominik

Greetz Dominik

T
94 Beiträge seit 2007
vor 13 Jahren

Du könntest eine eigene Collection Klasse erstellen und dieser das XmlRoot Attribute zuweisen.


[XmlRoot("Mappings")]
public class MappingCollection : List<Mapping>
{
}

In deinem Code benutzt du dann MappingCollection anstelle von List<Mapping>.