Deserialisieren von XML ohne Namensräume, aber in der einen Klasse erwarten namespaces
Duplizieren:
Weglassen alle xml-namespaces beim serialisieren eines Objekts?
Nicht das gleiche.. ich will in die andere Richtung: Deserialisieren!
Habe ich eine C# - Klasse als Gebrüll:
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.portalfiscal.inf.br/nfe")]
[System.Xml.Serialization.XmlRootAttribute("NFe", Namespace = "http://www.portalfiscal.inf.br/nfe", IsNullable = false)]
public partial class TNFe
{
private TNFeInfNFe infNFeField;
private SignatureType signatureField;
///<remarks/>
public TNFeInfNFe infNFe
{ ...
Ich verwenden Sie diese Klasse zum serialisieren/Deserialisieren von XML-Dateien durch den Benutzer anfordern.
Aber ich habe da ein problem: Namensräume definition Hinzugefügt wurden, auf die neue version dieser software.
Die XML ist immer noch die gleiche, nur das hinzufügen von namespaces definition.
ZB., Letzte version...
<?xml version="1.0" encoding="utf-8" ?>
<NFe>
<infNFe version="1.10">
...
und neue version...
<?xml version="1.0" encoding="utf-8" ?>
<NFe xmlns="http://www.portalfiscal.inf.br/nfe">
<infNFe version="2.10">
...
Brauche ich zum laden von XML-Dateien mit und ohne diese namespaces.
Ich habe eine Menge von geschachtelten Klassen, und jeder davon hat seine eigene namespaces definition.
Ich möchte die gleichen Klassen für XML, mit und ohne namespaces.
Ich habe versucht, erstellen Sie ein XmlTextReader-und überschreiben die NamespaceURI-Methode, aber ich erhält noch eine Ausnahme mit nicht viel info. Ich denke .NET engine versucht zu zwingen, die Klasse namespace-definition für das XML.
Arijit, ich löste es mit einem anderen Ansatz. Leider gibt es keine Möglichkeit, das zu tun, was ich wollte, wie ich wollte (mit weniger code wie möglich). So habe ich XmlTextReader für einige webservices und auf andere, die ich serialisiert das ganze Xml in einen string um und entfernt die nicht verwendete namespaces mit Hilfe von String.Ersetzen. Nicht die beste Sache überhaupt, aber es hat sich erwiesen, auch gut.
Danke für die Antwort, naja, eigentlich mein problem ist, suchen, die Ihnen ähnlich sind, die Antwort, die unten angegeben ist, nicht funktioniert, denke ich. Kannst du zeigen wie du es gemacht hast? Es ist 4 Jahre, warum microsoft nicht daran gedacht?
InformationsquelleAutor rodrigogq | 2010-02-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hatte ich laufen in eine ähnliche Herausforderung mit einer proxy-Klasse. Aus Gründen, die ich nicht weiter eingehen will, die ich brauchte, zu serialisieren der Klasse, die manuell mithilfe der XmlSerializer-auf web-server und Deserialisieren auf den client. Ich war nicht in der Lage zu finden, eine elegante Lösung online, so dass ich nur vermeiden das Problem, indem Sie die XmlTypeAttribute von der proxy-Klasse manuell, nachdem ich auto-generiert Visual Studio.
Ich immer wieder zurück, um zu sehen, ob es war ein Weg, um den namespace zu trainieren. Hier ist, wie ich es geschafft habe, ohne die Notwendigkeit, ändern Sie die automatisch generierten Klassen. Ich landete mit einem XmlTextReader zum zurückgeben der gewünschten namespace, auf den Knoten entsprechen den Namen der Eigenschaft. Es gibt Raum für Verbesserungen, aber ich hoffe, es hilft jemand.
Brillant die Soap-proxy reader --> Danke sehr.
InformationsquelleAutor Glass Bottom Boat
Um zu Deserialisieren von XML ohne namespace hinzufügen XmlRoot-Attribut auf die Klasse, die repräsentiert die Spitze der Hierarchie:
In meinem Beispiel die Xml hat kein namespace und beginnt wie
Klasse, dass es deserialisiert:
Offensichtlich, Ihre situation vielleicht ein bisschen anders, aber dieser code funktioniert bei mir:
-Stan
InformationsquelleAutor Stan Bashtavenko
Du Lesen könntest die Datei als text, entfernen Sie die problematische namespace-text, dann Deserialisieren.
Können Sie schreiben müssen, der "gute" text, zurück in die [memory/string/usw] der stream so, dass der XmlSerializer ist Deserialisieren aufgerufen werden kann.
InformationsquelleAutor TimW
Müssen Sie die IXmlSerializable implementieren, verbessern Sie Ihre benutzerdefinierte Serialisierung.
InformationsquelleAutor necrostaz