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
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#1

verschachtelte Klassen serialisieren und Deserialisieren

  Alt 18. Okt 2005, 15:09
hallo gemeinde

Bräuchte mal einen gewaltigenSchlag auf den Hinterkopf.

wie Oben schon gesagt , möchte ich verschachtelte Klassen serialisieren. ich habe eine Klasse:
Delphi-Quellcode:

type
TVersicherter = Class
  fName: String;
  fVorname: String;
  fNummer : Integer;
  fMitversicherte : Boolean;
... usw
end;
jetzt will ich erreichen , wenn Mitversicherte = true ist, meine Datei so aussieht:
XML-Code:
< TVersicherte
<Name> Mustermann </Name>
<Vornmae> Manfred </Vorname>
<Mitversicherte> true </Mitversicherte>
<1.Mitversicherter
<Name> Mustermann </NAme>
<Vorname> Hanna </Vorname>
</1.Miteversicherter>
</TVersicherter>
Für Hilfe in irgendeiner Weise wäre ich dankbar. Es kann auch in C# sein.

Danke Raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: verschachtelte Klassen serialisieren und Deserialisieren

  Alt 18. Okt 2005, 15:16
Ging das nicht nochmal mit Listenproperties? Ich meine so wäre es gewesen.. Oder Array-Properties...
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#3

Re: verschachtelte Klassen serialisieren und Deserialisieren

  Alt 6. Nov 2005, 02:40
"Fragestellen for D... äh Anfänger"
  • Was geht genau nicht?
  • Mit welchem Code hast du es versucht?
  • Was können wir ausschließen weil du es schon versucht hast?
  • Wie sehen deine Properties aus?


Außerdem, damit man mehr Lust zum Antworten bekommt:
  • Ts haben in .Net nix zu suchen, da würden sich mir, als Benutzer deiner Klasse in einer anderen .Net Sprache, die Fußnägel aufrolllen. Möglicherweise bis zum Knie...
  • Gibst du keinen access modifier für die Felder an, sind sie public! (published gibt es ja in .Net nicht)
    Public fXXX sehen sicher witzig aus (auch im XML output) aber wären doch irgendwie Unsinn, meinst du nicht?
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#4

Re: verschachtelte Klassen serialisieren und Deserialisieren

  Alt 6. Nov 2005, 11:09
hallo Robert,

mein Gott, das ist 14 Tage her und da du sonst nicht antwortest, hatte ich ebend fast eine Herzattacke .

die Frage hat sich erledigt. Da ich kein Netzzugang die ganze Woche habe, habe ich es einfacher realisiert. habe eine Klasse Einstellungen( jupp das T habe ich weggenommen ) dort mache ich alles zusammen. Im Endeffekt sieht es dann so aus
XML-Code:
<Einstellungen>
< Versicherte>
<Name> Mustermann </Name>
<Vornmae> Manfred </Vorname>
<Mitversicherte> true </Mitversicherte>
</Versicherter>
<1.Mitversicherter>
<Name> Mustermann </NAme>
<Vorname> Hanna </Vorname>
</1.Miteversicherter>
</Einstellungen>

Raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#5

Re: verschachtelte Klassen serialisieren und Deserialisieren

  Alt 6. Nov 2005, 14: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
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#6

Re: verschachtelte Klassen serialisieren und Deserialisieren

  Alt 6. Nov 2005, 14:45
hallo Robert,

erstmal Danke, werde es mir zu Gemüte führen. Meine XML Datei sieht schon richtig aus, habe auch die Klasse Einstellungen anderst gestaltet.

habe ebend keine Zeit muss Hausaufgaben machen .

melde mich heute abend nochmal.

Eine kurze Frage: Was macht der Parameterlose Constructor? ..... nicht gleich wieder 'dummes Schwein' sagen, bin nur schnell über dein Code gerasselt.
raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#7

Re: verschachtelte Klassen serialisieren und Deserialisieren

  Alt 6. Nov 2005, 14:51
Zitat von kiar:
Eine kurze Frage: Was macht der Parameterlose Constructor?
Nix.
Der Serializer sucht sich einen parameterlosen Constructor um eine Instanz anzulegen. Findet er keinen knallt's.
Hier muss der Constructor nix machen.

Zitat:
..... nicht gleich wieder 'dummes Schwein' sagen,
Oink, oink Das habe ich mir doch immer verkniffen...
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#8

Re: verschachtelte Klassen serialisieren und Deserialisieren

  Alt 6. Nov 2005, 17:55
Zitat von Robert_G:
Der Serializer sucht sich einen parameterlosen Constructor um eine Instanz anzulegen. Findet er keinen knallt's.
Hier muss der Constructor nix machen.
jetzt bin ich aus meinem Traum raus, hatte nämlich einen Constructor der ähnlich deinem aussah und jedesmal meckert delphi und wollte einen parameterlosen Constructor haben. dann hat es ebend einen gekriegt, obwohl ich damit nicht glücklich war.

raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#9

Re: verschachtelte Klassen serialisieren und Deserialisieren

  Alt 6. Nov 2005, 18:49
Zitat von kiar:
jetzt bin ich aus meinem Traum raus, hatte nämlich einen Constructor der ähnlich deinem aussah und jedesmal meckert delphi und wollte einen parameterlosen Constructor haben. dann hat es ebend einen gekriegt, obwohl ich damit nicht glücklich war.
*Taschentuch sucht*

Was ist denn jetzt so schlimm? Du kannst du doch vorerst einen parameterlosen constructor neben dem nehmen, den du schon hast.

Nachdem D2007 rausgekommen ist ( ) kannst du den dann in der Sichtbarkeit auf assembly Level reduzieren und das neue
InternalsVisibleToAttribute verwenden um ihn für den Serializer sichtbar zu machen. In 1.1 gab's auch das, aber das ist ein ziemlicher PITA.
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#10

Re: verschachtelte Klassen serialisieren und Deserialisieren

  Alt 12. Nov 2005, 18:24
Moin Robert,

habe versucht das ganze zu übersetzen. Bin leider an der List <''> gescheitert.

wäre nicht schlecht, wenn du der gescheiterten Existenz noch mal auf die Sprünge helfen könntest.


raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz