2010-11-23 6 views
4

WebServiceを呼び出してWebMethodから返された文字列を取得します。文字列はXMLとしてシリアル化されたオブジェクトで、System.Xml.XmlSerializerを使用して逆シリアル化する必要があります。XmlSerializerを使用してUTF-16でエンコードされたXMLファイルを読み取る

私の問題は、最初の行は、ドキュメントがUTF-16でエンコードされていることを示しているということです。

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

だから、デシリアライズするとき、私はエラーを取得:

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

それは、文字列操作を行うための作業を行います.Replace( "utf-16"、 "utf-8")ですが、XmlSerializerに知らせるにはクリーンメソッドが必要ですか?何も影響しないはず

+0

述べたように(答えを参照)、問題は発生しません。これを取り巻くより多くのコードを表示できますか?理想的には完全に再現可能な例ですか? –

答えて

5

- 次は正常に動作します:

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

あなたは正しいです、StringReaderを使ってうまく動作します。私の問題は、私は迂回し、文字列をByte []に​​変換し、XmlTextReaderでラップされたMemoryStreamでラップすることです。これは明らかにはるかに優れています。 –

関連する問題