Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
xml deserialisieren
MHI
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

xml deserialisieren

beantworten | zitieren | melden

verwendetes Datenbanksystem: MS-SQL, MySQL, SAP-DB(MaxDB)

Hallo Zusammen,
ich verwende die XmlSerializer-Klasse um XML zu deserialisieren. Das klappte bislang auch immer wunderbar, allerdings bin ich nun auf ein Problem gestoßen dem ich offenbar nicht gewachsen bin.
Ich bekomme eine XML-Struktur, die ich nicht deserialisiert bekomme. Das XML enthält zahlreiche Elemente <list> die jeweils unterItems <item> haben oder leer sind. Einige der <list>-Elemente sind direkt unterhalb des root-Knotens, getrennt durch andere Elemente, einige der <list>-Elemente befinden sich tiefer in der Struktur.
Innerhalb der <list>-Elemente befinden sich jeweils andere Strukturen. Das kann von reinem Text bis hin zu verschachtelten Elemente-Bäumen alles mögliche sein.

Da der <item> Inhalt jeweils so unterschiedlich ist, ist der einzige Weg den ich bislang gefunden habe, die Definition von

[XmlElement("list")]
public List<Liste> preise;
unter dem Class-Root und die definition der Klasse

public class Liste
        {
            public Liste()
            {

            }
            public object item;
}

Dabei bleibt der Inhalt der <list>-Elemente allerdings un-deserialisiert, was nicht zufriedenstellend ist.

Hier noch ein Beispiel XML:

<root>
  <test>Hallo</test>
  <id>5</id>
  <list name="emailadressen">
    <item>
      <emailadressen>
        <email type="VARCHAR (255)">[email protected]</email>
        <zweck type="VARCHAR (255)" />
      </emailadressen>
    </item>
  </list>
  <element>false</element>
  <list name="subdomains">
    <item id="47">
      <subdomains>
        <subdomain type="VARCHAR (255)">subdomain</subdomain>
        <selected type="BIT (1)">false</selected>
      </subdomains>
    </item>
  </list>
  <koordinaten>
    <latitude type="FLOAT (20)">48.493</latitude>
    <longitude type="FLOAT (20)">9.387</longitude>
  </koordinaten>
  <list name="naechste_print">
    <item id="113">
      <hb>
        <entfernung type="INTEGER (10)">29868</entfernung>
      </hb>
    </item>
    <item id="122">
      <hb>
        <entfernung type="INTEGER (10)">34179</entfernung>
      </hb>
    </item>
    <item id="104">
      <hb>
        <entfernung type="INTEGER (10)">38201</entfernung>
      </hb>
    </item>
  </list>
</root>

Wie stellt man es an, dass der Serialisierer "merkt" welcher typ von "<list>" zu deserialisieren ist?
private Nachricht | Beiträge des Benutzers
Alf Ator
myCSharp.de - Member



Dabei seit:
Beiträge: 637

beantworten | zitieren | melden

Hallo MHI,

kannst du die Struktur der XML noch definieren?

So wie die XML jetzt ist, könntest du pro Liste List<Item> machen. Und Item ist eine Klasse, die die Klassen emailadressen, subdomains und hb enthält.

Gruß, Alf
private Nachricht | Beiträge des Benutzers
MHI
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

beantworten | zitieren | melden

Hallo Alf Ator,
das XML kommt aus einer Schnittstelle, auf die ich leider keinen Einfluss habe.

Du meinst also, ich soll eine Item-Klasse einfügen, die die alle Möglichkeiten beinhaltet die vorkommen "könnten"?

Gruß MHI
private Nachricht | Beiträge des Benutzers
Alf Ator
myCSharp.de - Member



Dabei seit:
Beiträge: 637

beantworten | zitieren | melden

Zitat
Du meinst also, ich soll eine Item-Klasse einfügen, die die alle Möglichkeiten beinhaltet die vorkommen "könnten"?

Ja, ich denkte das wird so relativ unkompliziert funktionieren.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16145

beantworten | zitieren | melden

Bei so einer XML würde ich manuell serialisieren; nicht automatisch.
Sprich, von Hand alles parsen.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Ahrimaan
myCSharp.de - Member



Dabei seit:
Beiträge: 363
Herkunft: Thorn

beantworten | zitieren | melden

Dafür werde ich sicher erschlagen aber :
Was ist mit dem ganzem Dokument einelsen und dann per XPath drauf zugreifen ?

Die XPath Pfade kannst du dir in Konstanten oder ähnliches packen.
private Nachricht | Beiträge des Benutzers