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.