XML使用UTF-8编码进行反序列化

use*_*862 2 c# serialization utf-8 xml-serialization

我今天已经对此进行了大量搜索,但我找不到如何使用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>
Run Code Online (Sandbox Code Playgroud)

如果我试试这个

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

如果我把鼠标放在调试模式请求我得到这个:

     {<?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"
      ..................
Run Code Online (Sandbox Code Playgroud)

我如何强制成为UTF-8?

我只看到序列化,但反序列化我没有.

Llo*_*oyd 11

您可以使用StreamReader并指定UTF-8,您也可以告诉它使用BOM(如果存在):

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

    object result = serializer.Deserialize(reader);
}
Run Code Online (Sandbox Code Playgroud)

我不确定当XML阅读器遇到XML中的encoding="utf-16"指令时会发生什么,它可能会切换.