Ich werde damit beginnen, ich habe alle anderen Antworten auf diese Frage gelesen und alle von ihnen (wenn auch gute Lösungen) funktionierte nicht in meinem FallFehler beim Deserialisieren von XML in C# -Klasse abgeleitet von xsd.exe mit Namespace
ich mit
aC# Klasse von meiner XSD-Datei erstelltxsd.exe/c neworder.xsd
es erzeugt eine Klasse von 7000+ Linien so werde ich es relevante Teile schreiben.
using System;
using System.Diagnostics;
using System.Xml.Serialization;
using System.Collections;
using System.Xml.Schema;
using System.ComponentModel;
using System.IO;
using System.Text;
using System.Xml;
using System.Collections.Generic;
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")]
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.foo.com/schemas/w/v1.0")]
[System.Xml.Serialization.XmlRootAttribute("new-order", Namespace = "http://www.foo.com/schemas/w/v1.0")]
public partial class neworder
{
private List<customertype> customersField;
private string suppliercodeField;
private string versionField;
private static System.Xml.Serialization.XmlSerializer serializer;
public neworder()
{
this.customersField = new List<customertype>();
}
[System.Xml.Serialization.XmlArrayAttribute(Order = 0)]
[System.Xml.Serialization.XmlArrayItemAttribute("customer",IsNullable = false)]
public List<customertype> customers
{
get
{
return this.customersField;
}
set
{
this.customersField = value;
}
}
[System.Xml.Serialization.XmlAttributeAttribute("supplier-code")]
public string suppliercode
{
get
{
return this.suppliercodeField;
}
set
{
this.suppliercodeField = value;
}
}
[System.Xml.Serialization.XmlAttributeAttribute("version")]
public string version
{
get
{
return this.versionField;
}
set
{
this.versionField = value;
}
}
private static System.Xml.Serialization.XmlSerializer Serializer
{
get
{
if ((serializer == null))
{
serializer = new System.Xml.Serialization.XmlSerializer(typeof(neworder));
}
return serializer;
}
}
public static neworder Deserialize(string xml)
{
System.IO.StringReader stringReader = null;
try
{
stringReader = new System.IO.StringReader(xml);
return ((neworder)(Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
}
finally
{
if ((stringReader != null))
{
stringReader.Dispose();
}
}
}
Das ist nur ein kleiner Ausschnitt ist, der Rest ist nicht so wichtig, gerade jetzt, da ich das Gefühl, wenn dieses Problem gelöst wird, ich den Rest lösen kann.
Dies ist der Anfangsteil der XML-Datei
<new-order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.foo.com/schema/w/v1.0" version="1.0" supplier-code="FAKECODE" schemaLocation="http://www.foo.com/schemas/w/v1.0/TransmissionEnvelope.xsd">
<customers>
<customer w-number="123456" customer-number="12345-12345">
<client-info>
<client-name>John Doe</client-name>
<w-id>433348</w-id>
</client-info>
<transferee-name>
<first>John</first>
<last>Doe</last>
</transferee-name>
<spouse-name>
<first />
<last />
</spouse-name>
<o-address>
<street1>123 Fake st</street1>
<city>Fakeville</city>
<state>CA</state>
<postal-code>90210</postal-code>
<country>USA</country>
</o-address>
<d-address>
<street1 />
<city>harbour</city>
<state>VA</state>
<postal-code>55555</postal-code>
<country>USA</country>
</d-address>
<contact-info>
<phone>
<phone-type>CELL</phone-type>
<phone-number>555-555-5555</phone-number>
</phone>
<phone>
<phone-type>HOME</phone-type>
<phone-number>555-555-5555</phone-number>
</phone>
<phone>
<phone-type>WORK</phone-type>
<phone-number />
</phone>
<email>[email protected]</email>
<comments>Just any comments here</comments>
</contact-info>
</customer>
</customers>
</new-order>
ich versuche, es zu deserialisieren mit folgendem
XmlSerializer ser = new XmlSerializer(typeof(neworder));
neworder feed = (neworder)ser.Deserialize(new FileStream(filePath, FileMode.Open)) ;
Der Fehler, ich erhalte, ist die berüchtigte:
Es gibt ein Fehler im XML-Dokument (1, 2). http://www.foo.com/schema/w/v1.0 '> wurde nicht erwartet.
Ich habe immer wieder gelesen über die Stammnotiz als Attribut XMLROOT, die das obige tut. Und es hat den richtigen Namensraum.
Ich habe versucht, XmlRootAttribute zu XmlRoot zu ändern. Nichts. Ich habe versucht, den Namespace zu entfernen und die Klasse und nichts wieder zu tun.
Wrecking mein Gehirn auf was könnte hier falsch sein, weil alles scheint echt.
Veröffentlichen Sie das Schema und die XML-Datei. – Aybe
Können Sie eine vollständige XML-Datei posten (möglicherweise eine, die abgespeckt wurde)? Ich konnte die Ausnahme stoppen, indem ich 's' zu' schema' hinzufügte: 'xmlns =" http://www.foo.com/schemas/w/v1.0 "', aber ich weiß es nicht wenn es Probleme gibt, indem man mit einer "xml-Datei" testet, ist das * nur * das '' -Element. –
Quantic
Hinzugefügt XML-Datei. Ich möchte das Schema nicht veröffentlichen, weil es nicht ** mein ** Schema ist. Was ich als temporäre Problemumgehung getan habe (wir werden sehen, ob es für alle Testdokumente schwenkt) Ich habe eine XSD-Datei mit xsd.exe aus einem der Testdokumente erstellt, aus denen ich dann die Klasse erstellt habe. Es funktioniert auf dem einen XML-Dokument, aber ich versuche mehrere. Nicht die Art, wie ich gehen will, aber na ja. – reindeerKurt