Ich verwende eine Routine, die <T>
serialisiert. Es funktioniert, aber beim Herunterladen in den Browser sehe ich eine leere Seite. Ich kann die Seitenquelle anzeigen oder öffnen Sie den Download in einem Texteditor und ich sehe die XML, aber es ist in UTF-16, die ich denke, warum Browser-Seiten leer zeigen?
Wie ändere ich meine Serializer-Routine, um UTF-8 anstelle von UTF-16 zurückzugeben?
Die zurückgegebene XML-Quelle:
%Vor%Ein Beispiel für den Aufruf des Serialisierers:
%Vor%Der Serializer:
%Vor%Ich bin mit diesem Teil des Rahmens nicht ganz vertraut. Aber nach dem MSDN können Sie die Inhaltscodierung festlegen einer HttpResponse so:
%Vor% Nach dem Lesen Ihrer Frage sehe ich, dass dies der schwierige Teil ist. Das Problem liegt in der Verwendung von StringWriter
. Da .NET-Zeichenfolgen immer als UTF-16 gespeichert sind (Zitat erforderlich ^^), gibt StringWriter
dies als Kodierung zurück. Daher schreibt% code_de die XML-Deklaration als
Um das zu umgehen, können Sie in einen MemoryStream wie folgt schreiben:
%Vor%Andere Ansätze
Noch ein Schnitt: Ich habe gerade diese SO-Antwort festgestellt, die von jtm001 verlinkt wurde. Die Lösung besteht darin, das XmlSerializer
mit einem benutzerdefinierten XmlSerializer
bereitzustellen, das für die Verwendung von UTF8 als Codierung konfiguriert ist.
Athari schlägt vor, von XmlWriter
abzuleiten und die Kodierung als UTF8 anzukündigen.
Nach meinem Verständnis sollten beide Lösungen auch funktionieren. Ich denke, der Weg hier ist, dass Sie eine Art von Code oder eine andere Art von Code benötigen ...
Sie können einen StringWriter verwenden, der UTF8 erzwingt. Hier ist eine Möglichkeit, es zu tun:
%Vor%und verwenden Sie dann den Writer Utf8StringWriter in Ihrem Code.
%Vor%answer ist inspiriert von Serialisieren eines Objekts als UTF-8 XML in .NET
Tags und Links c# xml utf-8 xml-serialization