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)">test@example.org</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?
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
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
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.
Bei so einer XML würde ich manuell serialisieren; nicht automatisch.
Sprich, von Hand alles parsen.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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.