Gerar classe C # de XML


Respostas:


338

Sim, usando xsd.exe

D:\temp>xsd test.xml
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'D:\temp\test.xsd'.

D:\temp>xsd test.xsd /classes
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'D:\temp\test.cs'.

Notas

Responda como alterar o diretório no prompt de comando do desenvolvedor para d: \ temp pode ser útil.

Se você gerar classes para uma matriz multidimensional, há um erro no gerador XSD.exe, mas existem soluções alternativas .


18
Para usar, xsdexecute o Prompt de Comando do Desenvolvedor para VS2013 no menu Ferramentas.
Jess

13
xsd.exepode ser encontrado em:C:\Program Files (x86)\Microsoft SDKs\Windows
Julian

7
ser avisado se você tem um grande arquivo XML complexo a classe gerada será tão feio que ele vai ser quase inutilizável;)
Matthew bloqueio

3
Para mim xsd.exefoi encontrado em: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
user1991179 31/05

413

Se você estiver trabalhando no projeto .NET 4.5 no VS 2012 (ou mais recente), poderá colar Especialmente seu arquivo XML como classes.

  1. Copie o conteúdo do seu arquivo XML para a área de transferência
  2. No editor, selecione o local onde deseja colar suas aulas
  3. No menu, selecione EDIT > Paste Special > Paste XML As Classes

22
Eu só desejo que essas propriedades auto-implementadas sejam geradas, como acontece com "Colar JSON como classes". Atualmente, isso significa um resultado de código inchado em 6 vezes, o que é muito mais difícil de ler. Só isso me faz procurar outra ferramenta, infelizmente.
Nicholas Petersen

1
Isso foi deixado de fora do VS 2013?
Roger

3
@Roger Eu não usei VS 2013, mas acho que esse recurso deveria estar lá, certifique-se seu projeto tem como alvo .NET Framework 4.5
miszczu

2
Isso é muito mais rápido que xsd, mas a saída é praticamente a mesma.
Jess

4
Se você não tem uso ReSharper regex substituir por public (\w+) (\w+)\r\n +\{\r\n +get\r\n +\{\r\n +return this.*;\r\n +\}\r\n +set\r\n +\{\r\n +this.*;\r\n +\}\r\n +\}\r\n=> public $1 $2 { get; set; }e `private \ w + \ w + Campo; \ r \ n \ r \ n`
AlexDev

44

No começo, pensei que o Colar Especial era o Santo Graal! Mas então eu tentei e meu cabelo ficou branco, como no filme Indiana Jones.

Mas agora eu uso http://xmltocsharp.azurewebsites.net/ e agora sou mais jovem do que nunca.

Aqui está um segmento do que ele gerou:

namespace Xml2CSharp
{
    [XmlRoot(ElementName="entry")]
    public class Entry {
        [XmlElement(ElementName="hybrisEntryID")]
        public string HybrisEntryID { get; set; }
        [XmlElement(ElementName="mapicsLineSequenceNumber")]
        public string MapicsLineSequenceNumber { get; set; }

5
A saída desta ferramenta é boa, mas eu só quero dar uma palavra de cautela por aí para não enviar nenhum dado confidencial para este site (ou qualquer outro nesse sentido). Embora eu aprecie o serviço oferecido, não há política de privacidade e pouca ou nenhuma garantia de que o que você cola não será registrado e examinado etc.
SvenAelterman

2
Eu tinha um arquivo xml com algumas relações recursivas (talvez seja chamado de relação circular, não tenho certeza.) Os outros falharam, mas o xmltocsharp.azurewebsites.net teve muito sucesso nesse xml.
Koray

4
@ D.Kermott obrigado pelo link do site, dei uma olhada rápida e parece que ele faz um trabalho muito melhor do que o colar especial, o código parece mais limpo, embora meu xml de teste tenha criado mais classes, foi muito melhor usar.
Harag

Pena que parece inverter a ordem das classes (elementos externos listados por último)
Savage

22

Percebo que este é um post bastante antigo e você provavelmente já mudou.

Mas como eu tinha o mesmo problema, decidi escrever meu próprio programa.

O problema com a rota "xml -> xsd -> classes" para mim foi que ele apenas gerou um pedaço de código que era completamente impossível de manter e eu acabei processando.

Não é de forma alguma elegante, mas fez o trabalho para mim.

Você pode obtê-lo aqui: faça sugestões, se quiser.

SimpleXmlToCode


1
produz código incorreto: // ELEMENTS [XmlIgnore] public DateTime Value {get; conjunto; } String pública [XmlText] ValueString {get {return Value? "verdadeiro falso"; } defina {Value = value == "true"; }}
André Fiedler

E os construtores são desnecessárias + você deve incluir comentários para membros visíveis publicamente
André Fiedler

1
Em minha defesa, foi algo que bati muito rapidamente que funcionou para mim. Não voltei a isso, mas sinta-se à vontade para contribuir com o repo para quaisquer alterações.
Talon

Estou usando isso há alguns meses - não é perfeito, mas é bastante útil e acho que gera XML muito mais legível / simples que a pasta do VS2013 como XML. Muito apreciado Talon.
Codechinchilla 29/09

6

Você deve considerar svcutil ( pergunta svcutil )

Xsd.exe e svcutil operam no arquivo de esquema XML (.xsd). Seu XML deve estar em conformidade com um arquivo de esquema a ser usado por uma dessas duas ferramentas.

Observe que várias ferramentas de terceiros também existem para isso.


3

Você pode usar o xsd como sugerido por Darin.

Além disso, é recomendável editar o arquivo test.xsd para criar um esquema mais razoável.

type="xs:string"pode ser alterado para type="xs:int"para valores inteiros
minOccurs="0"pode ser alterado para minOccurs="1"onde o campo é obrigatório
maxOccurs="unbounded"pode ser alterado para maxOccurs="1"onde apenas um item é permitido

Você pode criar xsd-s mais avançados se quiser validar ainda mais seus dados, mas isso fornecerá pelo menos tipos de dados razoáveis ​​no c # gerado.


1

Use a sintaxe abaixo para criar uma classe de esquema a partir do arquivo XSD.

C:\xsd C:\Test\test-Schema.xsd /classes /language:cs /out:C:\Test\

0

Para converter XML em uma classe C #:

  • Navegue para o Microsoft Visual Studio Marketplace: - https://marketplace.visualstudio.com
  • Na barra de pesquisa, digite o texto: - xml para a ferramenta de código de classe
  • Baixe, instale e use o aplicativo

Nota: na maior parte do tempo, este aplicativo pode ser substituído, mas é provável que haja outra ferramenta que faça a mesma coisa.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.