XML SENDO GERADO COM ENCODING=“UTF-16”

 Tópico anterior Próximo tópico Novo tópico

XML SENDO GERADO COM ENCODING=“UTF-16”

C#

 Compartilhe  Compartilhe  Compartilhe
#484695 - 28/09/2018 16:14:09

BOSCOSANTANA
ARACAJU
Cadast. em:Novembro/2013


Estou com problema ao serializar um xml, o mesmo está sendo gerado com encoding="utf-16".
Mas o xsd está com encoding="utf-8", como faço para ele ser gerado com utf-8?

Code:
var xml = string.Empty;
var serialize = new XmlSerializer(typeof(Consulta));
using (var strignWriter = new StringWriter())
{
    using (var xmlWriter = XmlWriter.Create(strignWriter, new XmlWriterSettings { Indent = true, Encoding = UTF8Encoding.UTF8 }))
    {
        serialize.Serialize(xmlWriter, xmlConsulta);
        xml = strignWriter.ToString();
    }
}

Saída:

  <?xml version="1.0" encoding="utf-16" ?>
- <Consulta xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Protocolo>0</Protocolo>
  <ID>2222222</ID>
- <SolicitaResultado>
  <CodLab>12000</CodLab>
  <Operacao>Resultados</Operacao>
  <Acao>Mostra</Acao>
  <DataInicial>2018-09-10</DataInicial>
  <HoraInicial>00:00:00.0000000-03:00</HoraInicial>
  <DataFinal>2018-09-10</DataFinal>
  <HoraFinal>00:00:00.0000000-03:00</HoraFinal>
  <Grafico>0</Grafico>
  <DadosConstantes>1</DadosConstantes>
  </SolicitaResultado>
  </Consulta>




Boscosantana

Resposta escolhida #484696 - 28/09/2018 16:51:51

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Assista aqui

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#484708 - 01/10/2018 09:23:23

BOSCOSANTANA
ARACAJU
Cadast. em:Novembro/2013


Bom dia KERPLUNK.

Encontrei na net o que estava precisando.

"Isso acontece por conta do StringWriter que usa como padrão o Enconding UTF-16. Uma é solução fazer a sua própria implementação, herdando do StringWriter e forçando a utilização do UTF-8"
public class StringWriterWithEncoding : StringWriter
{
    public StringWriterWithEncoding( StringBuilder sb, Encoding encoding )
        : base( sb )
    {
        this.m_Encoding = encoding;
    }
    private readonly Encoding m_Encoding;
    public override Encoding Encoding
    {
        get
        {
            return this.m_Encoding;
        }
    }
}

E depois faça a alteração no seu código para trabalhar com essa implementação.

string xml = string.Empty;
var serialize = new XmlSerializer(typeof(Consulta));

using (var strignWriter = new StringWriterWithEncoding(new StringBuilder(),UTF8Encoding.UTF8))
{      
    using (var xmlWriter = XmlWriter.Create(strignWriter, new XmlWriterSettings { Indent = true }))
    {
        serialize.Serialize(xmlWriter, xmlConsulta);
        xml = strignWriter.GetStringBuilder().ToString();
    }
}

Boscosantana

#484709 - 01/10/2018 09:39:43

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
O caso é que você está usando o XmlWriter, que é mais especializado para XML mesmo. Quando você precisa de um XML com uma estrutura mais complexa(em termos de atributos), um simples TextStream ou TextWriter não vai atender. Mas pelo que vi isso não é seu caso, então a solução que apresento no vídeo deveria servir. Mas se conseguiu assim e está contente com o resultado ótimo. Isso é relativo à aquele esquema que você está fazendo de colocar as queries em arquivo?

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por BOSCOSANTANA em 02/10/2018 09:09:29