Como mapear XML para objects C #

Eu tenho um XML que eu quero carregar para objects, manipular esses objects (definir valores, ler valores) e, em seguida, salve os XMLs de volta. É importante para mim ter o XML na estrutura (xsd) que criei.

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

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

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

Se o esquema tiver dependencies (esquemas incluídos / importados), todos eles devem ser incluídos na mesma linha de comando.

Este código (C # DotNet 1.0 em diante) funciona muito bem para serializar a maioria dos objects para XML. (e de volta) Não funciona para objects contendo ArrayLists e, se possível, use apenas Arrays

 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); } 

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

Use o programa de linha de comando xsd.exe que vem com o Visual Studio para criar arquivos de class que você pode usar em seu projeto / solução e o namespace System.Xml.Serialization (especificamente, a class XmlSerializer) para serializar / deserialze essas classs para e de disco.

using System.Xml.Serialization; este namespace tem todos os atributos que você precisa se quiser mapear seu xml para qualquer object random. Como alternativa, você pode usar a ferramenta xsd.exe

xsd file.xsd {/ classs | / dataset} [/ element: element] [/ idioma: language] [/ namespace: namespace] [/ outputdir: directory] [URI: uri], que obterá seus arquivos xsd e criará classs c # ou vb.net a partir deles.

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

Eu concordo xsd é realmente uma porcaria … Mas eles fizeram outra versão que quase ninguém conhece. Seu gerador de objects xsd chamado. É a próxima versão e tem muito mais opções. Ele gera arquivos do XSD e funciona de forma fantástica. Se você tiver um gerador de esquema como o XML spy; crie um xsd do seu xml e use essa ferramenta. Eu criei classs muito muito complexas usando essa ferramenta. Em seguida, crie classs parciais para propriedades extras \ methods etc, e quando você atualizar seu esquema, você apenas recuperará suas classs e todas as edições persistirão em suas classs parciais.

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

xsd.exe da Microsoft tem muitos bugs: | Experimente esta pérola de código aberto http://xsd2code.codeplex.com/

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

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

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