Estou recebendo cadeias XML em um soquete e gostaria de convertê-las em objetos C #.
As mensagens têm o formato:
<msg>
<id>1</id>
<action>stop</action>
</msg>
Eu sou novo no .Net e não tenho certeza das melhores práticas para fazer isso. Eu usei o JAXB para Java antes e não tinha certeza se havia algo semelhante ou se isso seria tratado de uma maneira diferente.
c#
xml
xml-parsing
xml-serialization
Steve
fonte
fonte
Respostas:
Você precisa usar a
xsd.exe
ferramenta que é instalada com o Windows SDK em um diretório semelhante a:E em computadores de 64 bits:
E nos computadores com Windows 10:
Na primeira execução, você usa
xsd.exe
e converte seu XML de amostra em um arquivo XSD (arquivo de esquema XML):Isso fornece a você
yourfile.xsd
, que em uma segunda etapa, você pode converter novamente usandoxsd.exe
a classe C #:Isso deve fornecer um arquivo
yourfile.cs
que conterá uma classe C # que você pode usar para desserializar o arquivo XML que está recebendo - algo como:Deve funcionar muito bem na maioria dos casos.
Atualização: o serializador XML aceita qualquer fluxo como entrada - um arquivo ou um fluxo de memória ficará bem:
ou use um StringReader:
fonte
Você tem duas possibilidades.
Método 1. Ferramenta XSD
Suponha que você tenha seu arquivo XML neste local
C:\path\to\xml\file.xml
Você pode encontrá-lo em
Start Menu > Programs > Microsoft Visual Studio 2012 > Visual Studio Tools
Ou se você possui o Windows 8, basta começar a digitar Prompt de Comando do Desenvolvedor na tela Iniciarcd /D "C:\path\to\xml"
xsd file.xml
xsd /c file.xsd
E é isso! Você gerou classes C # do arquivo xml em
C:\path\to\xml\file.cs
Método 2 - Colar especial
Necessário Visual Studio 2012 ou superior com .Net Framework> = 4.5 como destino do projeto e componente individual 'Windows Communication Foundation' instalado
Edit > Paste special > Paste XML As Classes
E é isso!
Uso
O uso é muito simples com esta classe auxiliar:
Tudo o que você precisa fazer agora é:
fonte
Tente este método para converter Xml em um objeto. É feito exatamente para o que você está fazendo:
Chame-o usando este código:
fonte
Basta executar o Visual Studio 2013 como administração ... Copie o conteúdo do seu arquivo Xml. Vá para Visual Studio 2013> Editar> Colar Especial> Colar Xml como Classes C # Ele criará suas classes c # de acordo com o conteúdo do arquivo Xml.
fonte
Apenas no caso de alguém achar isso útil:
Você pode chamá-lo usando:
fonte
Você pode gerar a classe conforme descrito acima ou gravá-las manualmente:
Em seguida, você pode usar o ExtendedXmlSerializer para serializar e desserializar.
Instalação Você pode instalar o ExtendedXmlSerializer a partir do nuget ou executar o seguinte comando:
Serialização:
Desserialização
Este suporte ao serializador:
O ExtendedXmlSerializer oferece suporte ao .NET 4.5 ou superior e ao .NET Core . Você pode integrá-lo ao WebApi e AspCore.
fonte
Você pode usar o xsd.exe para criar classes associadas ao esquema no .Net e no XmlSerializer para desserializar a sequência: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.deserialize.aspx
fonte
Simplificando a grande resposta de Damian,
fonte
Use o método abaixo para converter XML String em DTO usando JAXB
fonte
Se você tiver o xsd da mensagem xml, poderá gerar classes c # usando a ferramenta .Net xsd.exe.
Essas classes .Net podem então ser usadas para gerar o xml.
fonte
Além das outras respostas aqui, você pode usar naturalmente a classe XmlDocument , para leitura do tipo XML DOM, ou o XmlReader , leitor somente de avanço rápido, para fazê-lo "manualmente".
fonte
Outra maneira com as ferramentas avançadas de geração de classes xsd para c #: xsd2code.com. Esta ferramenta é muito útil e poderosa. Ele tem muito mais personalização do que a ferramenta xsd.exe do Visual Studio. O Xsd2Code ++ pode ser personalizado para usar Listas ou Matrizes e suporta esquemas grandes com muitas instruções de importação.
Nota de alguns recursos,
fonte
Sei que essa pergunta é antiga, mas me deparei com ela e tenho uma resposta diferente de, bem, todo mundo :-)
A maneira usual (como os comentaristas acima mencionam) é gerar uma classe e desserializar seu xml.
Mas ( aviso: autopromoção desavergonhada aqui ) acabei de publicar um pacote de pepitas aqui , com o qual você não precisa. Você apenas vai:
É isso literalmente, nada mais é necessário. E, o mais importante, se o seu xml for alterado, o objeto também será alterado automaticamente.
Se você preferir baixar a dll diretamente, a página do github está aqui .
fonte
fonte