Ich versuche, eine XML-Datei in C# -Klassen zu deserialisieren. Ich habe ein Online-Tool verwendet, um die Klassen für mich zu generieren, da die Struktur der XML-Datei sehr komplex ist. Dies funktionierte gut, mit Ausnahme der Population von wiederholten Elementen in einer List-Eigenschaft in der Hauptklasse.List-Eigenschaft, die bei Deserialisierung von XML nicht ausgefüllt wird
Ich verwende DotNet 4.5, C# in WPF.
Eine vereinfachte Version der XML-Datei lautet wie folgt:
<orderMessage xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:gs1:ecom:order:xsd:3">
<order xmlns="">
<creationDateTime>2017-07-10T00:00:00</creationDateTime>
<documentStatusCode>ORIGINAL</documentStatusCode>
<documentActionCode>ADD</documentActionCode>
</order>
<order xmlns="">
<creationDateTime>2017-07-10T00:00:00</creationDateTime>
<documentStatusCode>ORIGINAL</documentStatusCode>
<documentActionCode>ADD</documentActionCode>
</order>
</orderMessage>
Die Klassen, die ich wie unten bin mit:
[XmlRoot(ElementName = "order")]
public class Order
{
[XmlElement(ElementName = "creationDateTime")]
public string CreationDateTime { get; set; }
[XmlElement(ElementName = "documentStatusCode")]
public string DocumentStatusCode { get; set; }
[XmlElement(ElementName = "documentActionCode")]
public string DocumentActionCode { get; set; }
[XmlAttribute(AttributeName = "xmlns")]
public string Xmlns { get; set; }
}
[XmlRoot(ElementName = "orderMessage", Namespace = "urn:gs1:ecom:order:xsd:3")]
public class OrderMessage
{
[XmlElement(ElementName = "order")]
public List<Order> Order { get; set; }
[XmlAttribute(AttributeName = "xsd", Namespace = "http://www.w3.org/2000/xmlns/")]
public string Xsd { get; set; }
[XmlAttribute(AttributeName = "xsi", Namespace = "http://www.w3.org/2000/xmlns/")]
public string Xsi { get; set; }
[XmlAttribute(AttributeName = "xmlns")]
public string Xmlns { get; set; }
}
Die Deserialisierung Code lautet wie folgt:
XmlSerializer serializer = new XmlSerializer(typeof(OrderMessage));
StreamReader reader = new StreamReader(filename);
OrderMessage newOrderMessage;
try
{
newOrderMessage = (OrderMessage)serializer.Deserialize(reader);
}
catch (Exception e)
{
throw e;
}
reader.Close();
Wenn ich den Code ausführen, läuft es ohne Fehler, aber ich am Ende mit einer leeren Liste. Es gab andere Strukturen in der XML-Datei (die keine wiederholten Strukturen waren - daher keine Listen-Eigenschaft), die ohne Probleme gefüllt wurden, die ich weggelassen habe.
Ich habe mir eine Reihe von Fragen angesehen, die meinen ähneln, aber sie scheinen die gleiche Methode vorzuschlagen, die ich verwende.
Ich kann das XML nicht ändern, wie es von einer dritten Partei ist.
Ich würde es sehr schätzen, wenn mir jemand in die richtige Richtung zeigen könnte.
BTW - Ich weiß, dass ein Fehler zu fangen und dann zu werfen ist nutzlos, aber ich habe nur das getan, um einen Haltepunkt hinzuzufügen, damit ich die inneren Ausnahmen betrachten konnte, wenn es welche gab. Ich werde die Fehlerbehandlung sinnvoller machen, sobald der Prozess funktioniert.
Ich bin mir nicht sicher, aber ich denke, dass es passiert, weil es kein Elternteil zu der gibt, die eine Liste darstellt. Es sollte so etwas wie Prüfauftrag 1 Prüfauftrag 2 –
@VarunMehta sein habe ich versucht, dass aber es hat immer noch die gleiche Sache – james33
Haben Sie Ihr Eigentum und XML Element Name auf Bestellungen umbenennen?XmlElement (ElementName = "orders")] öffentliche Liste Orders {get; einstellen; } –