XmlSerializer Deserialisieren Array/Liste Mehrerer Objekte in Root
Ich versuche zu Deserialisieren Sie die folgende XML-Ausgabe:
<?xml version="1.0" encoding="ISO-8859-1"?>
<Foo>
<Val>Data1</Val>
</Foo>
<Foo>
<Val>Data2</Val>
</Foo>
(Dies ist die Ausgabe von einem hardware-Gerät und kann nicht geändert werden)
Ich habe eine XML-Datentyp definiert als:
[XmlType(AnonymousType=true, Namespace="")]
public class Foo
{
public string Val { get; set; }
}
Ich habe versucht, deserialisiert das array durch die Schaffung einer serializer wie:
var s = new XmlSerializer(typeof(Foo[]));
//or
var s = new XmlSerializer(typeof(List<Foo>);
Aber jeder Aufruf en.Deserialisieren() bewirkt eine InvalidOperaitonException:
System.InvalidOperationException: <Foo xmlns=''> was not expected.
Hinweis
var s = new XmlSerializer(typeof(Foo));
//Only deseralizes the first Foo (Data1).
Vielen Dank für Ihre Hilfe.
- Die XML, die Sie versuchen zu generieren ist nicht gültig...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke das Thema ist mit dem mitgelieferten xml.
Test-app sagt
Und die XML sein sollte
Wenn Sie entfernen die erste Zeile
Und minipulate den string in
Funktionieren könnte.
Nicht gültige Xml. Es muss ein core root-element, um richtig zu funktionieren.
dies ist keine gültige xml-Datei, sodass Sie kann nicht deserialisiert Sie, wie ein gültiges xml. Sie müssen irgendeine Art von hack, um diese Arbeit zu machen. ich würde vorschlagen, einfügen am Anfang der xml-Datei und das einfügen am Ende der xml. dann können Sie deserialisiert, da Sie nicht diese änderung an der xml-Seite, tun Sie es in Ihrem code.
nun, dies muss Sie wieder die richtige Liste.
Als die anderen Poster sagen, das XML, die das Gerät produziert, ist nicht kompatibel zu der Art und Weise .NET serialisiert/deserialisiert Objekt. Gültige XML, und .NET erfordert gültige XML, verfügt über ein root-element.
Schlage ich vor:
br, Marcel
Technisch, was Sie da haben ist nicht eine wohlgeformtes XML-Dokument (die hat genau ein Wurzel-element), sondern eine wohlgeformte externe geparste Entität (das kann eine beliebige Anzahl von Elementen, die nicht in andere Elemente, als auch als text nicht enthalten keine Elemente). Es sollte daher analysieren, wenn Ihr XML-parser hat einen Einstiegspunkt für die Analyse EPEs, anstatt Dokumente. Sie könnte auch eine stub-Dokument, das Sie als Referenz einschließt Ihrem EPE und parse das Dokument.
Xstream für .Net könnte eine nützliche API