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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top