ti-enxame.com

Como mapeio XML para objetos C #

Eu tenho um XML que quero carregar nos objetos, manipular esses objetos (definir valores, ler valores) e, em seguida, salvar esses XMLs novamente. É importante para mim ter o XML na estrutura (xsd) que eu criei.

Uma maneira de fazer isso é escrever meu próprio serializador, mas existe um suporte interno ou código-fonte aberto em C # que eu possa usar?

28
Ragoler

Você pode gerar classes C # serializáveis ​​a partir de um esquema (xsd) usando xsd.exe:

xsd.exe dependency1.xsd dependency2.xsd schema.xsd /out:outputDir

Se o esquema tiver dependências (esquemas incluídos/importados), todos deverão ser incluídos na mesma linha de comando.

28
ckarras

Esse código (C # DotNet 1.0 em diante) funciona muito bem para serializar a maioria dos objetos para XML. (e vice-versa) Ele não funciona para objetos que contêm ArrayLists e, se possível, continua usando somente matrizes

using System;    
using System.IO;
using System.Text;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;


public static string Serialize(object objectToSerialize)
{
    MemoryStream mem = new MemoryStream();          
    XmlSerializer ser = new XmlSerializer(objectToSerialize.GetType());         
    ser.Serialize(mem, objectToSerialize);                      
    ASCIIEncoding ascii = new ASCIIEncoding();
    return ascii.GetString(mem.ToArray());
}        

public static object Deserialize(Type typeToDeserialize, string xmlString)
{
    byte[] bytes = Encoding.UTF8.GetBytes(xmlString);
    MemoryStream mem = new MemoryStream(bytes);         
    XmlSerializer ser = new XmlSerializer(typeToDeserialize);
    return ser.Deserialize(mem);
}
18
Poltergoose

LINQ to XML é muito poderoso se você estiver usando .net 3.5, LINQ to XSD também poderá ser útil para você!

7
ljs

Use o programa de linha de comando xsd.exe que acompanha o visual studio para criar arquivos de classe que você pode usar em seu projeto/solução e o espaço para nome System.Xml.Serialization (especificamente a classe XmlSerializer) para serializar/desserializar essas classes de e para disco.

2
Joel Coehoorn

using System.Xml.Serialization; esse espaço para nome possui todos os atributos necessários para mapear seu xml para qualquer objeto aleatório. Como alternativa, você pode usar a ferramenta xsd.exe

xsd file.xsd {/ classes |/dataset} [/ elemento: elemento] [/ idioma: idioma] [/ espaço para nome: espaço para nome] [/ outputdir: diretório] [URI: uri], que utilizará seus arquivos xsd e criaria classes c # ou vb.net a partir deles.

http://msdn.Microsoft.com/en-us/library/x6c1kb0s (VS.71) .aspx

2
chris.w.mclean

Criamos uma estrutura que pode gerar automaticamente classes C # a partir do seu XML. É um modelo de item visual para o qual você passa seu XML e as classes são geradas automaticamente em seu projeto. Usando essas classes, você pode criar/ler/gravar seu XML.

Verifique este link para a estrutura e o modelo de item do Visual C #: clique aqui

1
Savaratkar

o xsd.exe da Microsoft tem muitos erros: | Experimente este pearl de código aberto http://xsd2code.codeplex.com/

1
binball

Eu concordo que o xsd é realmente uma porcaria ... Mas eles fizeram outra versão que quase ninguém conhece. É chamado de gerador de objetos xsd. É a próxima versão e tem muito mais opções. Ele gera arquivos do XSD e funciona de maneira fantástica. Se você tiver um gerador de esquema como o espião XML; crie um xsd a partir do seu xml e use essa ferramenta. Eu criei classes muito muito complexas usando essa ferramenta. Em seguida, crie classes parciais para propriedades extras\métodos etc., quando você atualizar seu esquema, você apenas regenera suas classes e quaisquer edições persistem em suas classes parciais.

http://www.Microsoft.com/download/en/details.aspx?displaylang=en&id=7075

1
Steve Coleman

Aposto que o NetDataContractSerializer pode fazer o que você quiser.

0
dcstraw