AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Prism verschachtelte Klassen serialisieren und Deserialisieren
Thema durchsuchen
Ansicht
Themen-Optionen

verschachtelte Klassen serialisieren und Deserialisieren

Ein Thema von kiar · begonnen am 18. Okt 2005 · letzter Beitrag vom 12. Nov 2005
 
Robert_G
(Gast)

n/a Beiträge
 
#5

Re: verschachtelte Klassen serialisieren und Deserialisieren

  Alt 6. Nov 2005, 13:19
Wie du wieder gekonnt alle Punkte ignoriert hast...
Wenn nun Karl-Heinz hier reinschaut und auf eine Lösung hofft, gibt's nur unser hohles Geblubber...

Deine Datei ist kein XML! 1.Mitversicherte dürfte kein korrekter Tag sein.
Du willst wohl sowas haben:
XML-Code:
<?xml version="1.0" encoding="utf-8" ?>
<Einstellungen xmlns="http://Raik.net/Einstellungen.xsd">
  <Versicherte>
    <Versicherter Name="Mustermann"
                  Vorname="Manfred">
      <Mitversicherte>
        <Mitversicherter Name="Mustermann"
                         Vorname="Hanna"/>
      </Mitversicherte>
    </Versicherter>
  </Versicherte>
</Einstellungen>
Das sind effektiv 3 Klassen: Die Einstellungen, ein Versicherter und ein Hauptversicherter, der von Versicherter erbt um dann noch eine Eigenschaft Mitversicherte einzuführen.

Ich hatte gerade Lust und habe das mal zusammengefriemelt.
Du wirst es dir noch zu D.Net untersetzen müssen, aber das sollte easy möglich sein. (zumal dir ja auch C# nicht unbekannt ist )

Der Versicherte:
Delphi-Quellcode:
uses
   System.Xml.*;

type
   [SerializableAttribute]
   [XmlTypeAttribute(&Namespace := 'http://Raik.net/Einstellungen.xsd')]
   Versicherter = public class
   public
      [XmlAttributeAttribute]
      property Name : String;
      [XmlAttributeAttribute]
      property Vorname : String;
      constructor; empty; //parameterloser constructor für den serializer
      constructor(name, vorname : String);
   end;
   
implementation

constructor Versicherter(name, vorname : String);   
begin
   self.Name := name;
   self.Vorname := vorname;
end;
Der Hauptversicherte:

Delphi-Quellcode:
uses
   System.Xml.*,
   System.Collections.Generic;

type
   [SerializableAttribute]
   [XmlTypeAttribute(&Namespace := 'http://Raik.net/Einstellungen.xsd')]
   HauptVersicherter = public class(Versicherter)
   private
      fMitVersicherte : List<Versicherter> := new List<Versicherter>();
   public
      [XmlArrayAttribute('Mitversicherte')]
      [XmlArrayItemAttribute('Mitversicherter', IsNullable := false)]
      property MitVersicherte : List<Versicherter> read fMitVersicherte;
   end;

Und die Einstellungen:
Delphi-Quellcode:
uses
   System.Xml.*,
   System.Collections.Generic;

type
   [XmlRootAttribute(&Namespace := 'http://Raik.net/Einstellungen.xsd',
                     IsNullable := false)]
   Einstellungen = public class
   private
      fVersicherte: List<HauptVersicherter> := new List<HauptVersicherter>();
   protected
   public
      [XmlArrayAttribute('Versicherte')]
      [XmlArrayItemAttribute('Versicherter',
                             typeof(HauptVersicherter),
                             IsNullable := false)]
      property Versicherte : List<HauptVersicherter> read fVersicherte;
   end;
Alles "dumme" Daten container mit ein paar Attributen, die das XML Mapping steuern.

Hier noch Bleistift code zum Laden und Speichern:
Delphi-Quellcode:
class method ConsoleApp.Load(fileName : String);
begin
   var serializer := new XmlSerializer(typeof(Einstellungen));
   
   using reader := new XmlTextReader(fileName) do
      var einstellungen := serializer.Deserialize(reader) as Einstellungen;
end;

class method ConsoleApp.Save(fileName : String);
begin
   var serializer := new XmlSerializer(typeof(Einstellungen));

   var einstellungen := new Einstellungen();
      
   with hauptVersicherter := new HauptVersicherter('Mustermann', 'Manfred') do
   begin
      hauptVersicherter.MitVersicherte.Add(new Versicherter('Mustermann', 'Hanna'));
      einstellungen.Versicherte.Add(hauptVersicherter);
   end;

   using writer := new XmlTextWriter(fileName, Encoding.UTF8) do
      serializer.Serialize(writer, einstellungen);
end;
Ist eigentlich ziemlich easy und spätestens beim Übersetzen sollte der Groschen fallen.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz