2010-11-23 9 views
4

Ich rufe einen WebService an und erhalte eine Zeichenfolge, die von einer WebMethod zurückgegeben wird. Die Zeichenfolge ist ein Objekt, das als XML serialisiert ist und mit dem System.Xml.XmlSerializer deserialisiert werden sollte.UTF-16-codierte XML-Datei mit XmlSerializer lesen

Mein Problem ist, dass die erste Zeile zeigt an, dass das Dokument UTF-16 codiert:

<?xml version="1.0" encoding="utf-16"?> 

Also, wenn Deserialisieren ich den Fehler:

There is an error in XML document (0, 0). 

Es spielt Arbeitsstrang zu tun .Replace ("utf-16", "utf-8"), aber es muss eine saubere Methode geben, um den XmlSerializer wissen zu lassen?

+0

As (siehe Antwort) festgestellt, die nicht zu einem Problem führen sollen; Kannst du mehr von dem Code zeigen, der das umgibt? Idealerweise ein vollständig reproduzierbares Beispiel? –

Antwort

5

dass nichts beeinflussen sollte - folgende Arbeiten fein:

using System; 
using System.IO; 
using System.Xml.Serialization; 

[XmlRoot("someType")] 
public class Test { 
    [XmlAttribute("hello")] 
    public string Value { get; set; } 
} 
static class Program { 
    static void Main()  { 
     string xml = @"<?xml version=""1.0"" encoding=""utf-16""?> 
<someType hello=""world""/>"; 
     var ser = new XmlSerializer(typeof(Test)); 
     Test obj; 
     using (var reader = new StringReader(xml)) { 
      obj = (Test)ser.Deserialize(reader); 
     } 
     Console.WriteLine(obj.Value); 
    } 

} 
+1

Sie haben Recht, die Verwendung eines StringReader funktioniert gut. Mein Problem war, dass ich einen Umweg nahm, die Zeichenfolge in ein Byte [] umwandelte, es in einen MemoryStream einwickelte, der in einen XmlTextReader eingewickelt wurde - Das ist offensichtlich viel besser, danke. –