Die Herausforderung entsteht, wenn versucht wird, Objekte zu serialisieren, ohne übermäßige XML-Namespace-Deklarationen wie xsi und xsd zu generieren. Standardmäßig fügen Serialisierungsprozesse diese Namespaces in das resultierende XML-Dokument ein.
Betrachten Sie den folgenden Codeausschnitt, der das Problem veranschaulicht:
StringBuilder builder = new StringBuilder(); XmlWriterSettings settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = true; using (XmlWriter xmlWriter = XmlWriter.Create(builder, settings)) { XmlSerializer s = new XmlSerializer(objectToSerialize.GetType()); s.Serialize(xmlWriter, objectToSerialize); }
Das resultierende XML-Dokument enthält Namespace-Deklarationen:
<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns="urn:something"> ... </message>
Um diese unnötigen Namespace-Deklarationen zu vermeiden, ist es wichtig, einen benutzerdefinierten Namespace zu verwenden Objekte:
... XmlSerializer s = new XmlSerializer(objectToSerialize.GetType()); XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("",""); s.Serialize(xmlWriter, objectToSerialize, ns);
Durch die Verwendung der XmlSerializerNamespaces-Klasse und das Hinzufügen einer leeren Zeichenfolge als Schlüssel und Wert ist es möglich, die Standard-Namespace-Deklarationen zu überschreiben und die gewünschte Ausgabe zu erzeugen:
<message> ... </message>
Das obige ist der detaillierte Inhalt vonWie kann ich Namespace-Deklarationen beim Serialisieren von XML in .NET anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!