3

今日、これについてすでに多くのことを検索しましたが、UTF-8 エンコーディングでデシリアライズする方法が見つかりません。

 <?xml version="1.0" encoding="UTF-8"?>
 <AvailabilityRequestV2 xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema- instance"
 siteid="0000"
 apikey="0000"
 async="false" waittime="0">
 <Type>4</Type>
 <Id>159266</Id>
 <Radius>0</Radius>
 <Latitude>0</Latitude>
 <Longitude>0</Longitude>
 </AvailabilityRequestV2>

これを試したら

 string xmlString = File above;         
 XmlSerializer serializer = new XmlSerializer(typeof(AvailabilityRequestV2));
 AvailabilityRequestV2 request = (AvailabilityRequestV2)serializer.Deserialize(
     new MemoryStream(Encoding.UTF8.GetBytes(xmlString)));

マウス オーバー リクエストをデバッグ モードにすると、次のようになります。

     {<?xml version="1.0" encoding="utf-16"?><AvailabilityRequestV2 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      ..................

UTF-8 を強制するにはどうすればよいですか?

私はシリアル化することしか見ませんでしたが、逆シリアル化はしませんでした。

4

3 に答える 3

11

a を使用してStreamReaderUTF-8 を指定できます。また、存在する場合は BOM を使用するように指示することもできます。

using (StreamReader reader = new StreamReader("my.xml",Encoding.UTF8,true)) {
    XmlSerializer serializer = new XmlSerializer(typeof(SomeType));

    object result = serializer.Deserialize(reader);
}

encoding="utf-16"XML リーダーがXML 内のディレクティブに遭遇するとどうなるかはわかりませんが、切り替えられる可能性があります。

于 2013-02-25T17:31:41.030 に答える
3

ファイルの内容を .Net/CLR 文字列に丸呑みすると、UTF-16 でエンコードされます。つまり、元のソース エンコードから変換されています。CLR は内部で UTF-16 を使用します。したがって、acharが 16 ビットである理由です。

その結果、ドキュメントの [元の] XML 宣言で指定されたエンコーディングは、ドキュメントの実際のエンコーディングと一致しなくなりました。

StreamReader上記の@Lloydが推奨するようにaを渡すのが最善です。

于 2013-02-25T17:46:30.213 に答える