XML Десериализовывают с кодированием UTF-8

Я уже искал много сегодня об этом, и я не могу найти, как Десериализовать с кодированием UTF-8.

 <?xml version="1.0" encoding="UTF-8"?>
 
 4
 159266
 0
 0
 0
 

Если я пробую это

 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"?>

Как я могу вызвать, чтобы быть UTF-8?

Я только видел, чтобы Преобразовать в последовательную форму, но Десериализовывать я не сделал.

1
nl ja de

3 ответы

Можно использовать 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);
}

Я не уверен, что происходит, когда средство чтения XML, однако, сталкивается с кодированием = "utf-16" директива в XML, это может переключиться.

9
добавлено

Once you have slurped the contents of a file into a .Net/CLR string, it is UTF-16 encoded: it has been transformed from its original source encoding. The CLR uses UTF-16 internally—hence the reason for a char being 16 bits.

В результате кодирование, определенное в [оригинальном] определении xml документа, теперь противоречит фактическому кодированию документа.

Лучше всего передать StreamReader , как рекомендуется @Lloyd выше.

3
добавлено

Я думаю, что для примера от @Lloyd нужно , новый ключевое слово:

using (StreamReader reader = new StreamReader("my.xml",Encoding.UTF8,true)) {
1
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot