3 Stimmen

Wie man XML-Encoding angibt, wenn man ein Objekt in C# serialisiert

Ich serialisiere ein C#-Objekt in ein XML-Dokument und sende das XML-Dokument an einen Drittanbieter. Der Anbieter sagt mir, dass die Kodierung im Dokument UTF-16 ist, aber das XML-Dokument UTF-8-Inhalte enthält und sie es nicht verwenden können. Hier ist der Code, den ich verwende, um die XML-Datei zu erstellen, der ohne Fehler ausgeführt wird und ein XML-Dokument erstellt.

// XmlSerializer mit meinem Objekttyp instanziieren.
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyObject));

// Einen neuen Stream instanziieren und Dateilokation sowie Modus übergeben.
Stream stream = new FileStream(@"C:\doc.xml", FileMode.Create);

// XmlWriter instanziieren und Stream sowie Kodierung übergeben.
XmlWriter xmlWriter = new XmlTextWriter(stream, Encoding.Unicode);

// Serialize-Methode aufrufen und XmlWriter sowie mein Objekt übergeben.
xmlSerializer.Serialize(xmlWriter, myObject);

// Schreiber und Stream schließen.
xmlWriter.Close();
stream.Close();

Wenn ich das ausführe, zeigt das XML-Dokument dies in der ersten Zeile:

Ich habe versucht, die Kodierung von Encoding.Unicode in Encoding.UTF8 im XmlTextWriter zu ändern, aber das ändert die erste Zeile des XML-Dokuments nicht und es zeigt immer noch UTF-16 an.

Ich habe auch versucht, die Serialize-Methode mit 4 Parametern (Schreiber, Objekt, Namespaces, Kodierung) zu verwenden und UTF8 als Kodierung anzugeben, aber das änderte die XML-Dokumentenspezifikation auch nicht.

Ich glaube, ich muss nur die Kodierung, die im XML-Dokument angezeigt wird, auf UTF-8 ändern und der Drittanbieter wird zufrieden sein. Ich kann nicht herausfinden, was ich falsch mache.

3voto

Jesse C. Slicer Punkte 19426

Wenn ich von Encoding.Unicode auf Encoding.UTF8 wechsle, wird die Datei ordnungsgemäß generiert. Vielleicht schauen Sie sich eine alte Version Ihrer Datei an?

In einem nicht zusammenhängenden Abschnitt sollten Sie using zur deterministischen Entsorgung von Objekten verwenden, die IDisposable implementieren:

XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyObject));

using (Stream stream = new FileStream(@".\doc.xml", FileMode.Create))
using (XmlWriter xmlWriter = new XmlTextWriter(stream, Encoding.UTF8))
{
    xmlSerializer.Serialize(xmlWriter, myObject);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X