Como faço para mapear o XML para C # objetos
-
01-07-2019 - |
Pergunta
Eu tenho um XML que eu quero carregar a objetos, manipular esses objetos (valores ajustados, valores lidos) e depois salvar os XMLs de volta. É importante para mim ter o XML na estrutura (xsd) que eu criei.
Uma maneira de fazer isso é escrever o meu próprio serializador, mas há um suporte embutido para ele ou de fonte aberta em C # que eu posso usar?
Solução
Você pode gerar classes C # serializados de um esquema (XSD) usando xsd.exe:
xsd.exe dependency1.xsd dependency2.xsd schema.xsd /out:outputDir
Se o esquema tem dependências (incluídas / esquemas importados), todos eles devem ser incluídos na mesma linha de comando.
Outras dicas
Este código (C # .Net 1.0 em diante) funciona muito bem para serializar a maioria dos objetos para XML. (e volta) Ele não funciona para objetos contendo ArrayLists e, se possível vara a usar 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 programa de linha de comando xsd.exe que vem com o Visual Studio para criar arquivos de classe que você pode usar em seu projeto / solução, eo namespace System.Xml.Serialization (especificamente, a classe XmlSerializer) para serialize / deserialze essas classes de e para o disco.
using System.Xml.Serialization; este namespace tem todos os atributos que você precisa se você quiser mapear o XML para qualquer objeto aleatório. Alternativamente, você pode usar a ferramenta xsd.exe
xsd file.xsd {/ aulas | / Dataset} [elemento /: Elemento] [/ Idioma: idioma] [/ namespace: namespace] [/ Outputdir: diretório] [URI: uri] que terá seus arquivos XSD e criar classes C # ou VB.NET fora delas.
http://msdn.microsoft.com/ eN-uS / biblioteca / x6c1kb0s (VS.71) .aspx
Eu concordo xsd é realmente uma porcaria ... Mas eles fizeram uma outra versão que quase ninguém conhece. Seu chamado gerador de objeto XSD. Sua próxima versão e tem muito mais opções. Ele gera arquivos de XSD e trabalha fantástico. Se você tem um gerador de esquema como espião XML; criar um XSD a partir de seu XML e usar esta ferramenta. Eu criei as classes muito, muito complexas usando esta ferramenta. Em seguida, criar classes parciais para propriedades extras \ métodos etc, então quando você atualizar o esquema que você acabou de regen suas classes e as edições persistem em suas classes parciais.
http://www.microsoft.com/download/ en / details.aspx? displaylang = en & id = 7075
xsd.exe da Microsoft tem um monte de erros: | Tente esta fonte de pérolas aberta http://xsd2code.codeplex.com/
Nós criamos uma estrutura que pode auto-gerar classes C # fora de seu XML. É um modelo de item visual para que você passar o seu XML e as classes são gerados automaticamente no seu projeto. Usando essas classes você pode criar / ler / escrever o seu XML.
Confira neste link para o modelo de estrutura e Visual C # artigo: clique aqui
Aposto NetDataContractSerializer pode fazer o que quiser.