Pergunta

Crie uma classe (chamemos-lhe FormElement). Essa classe deve ter algumas propriedades, como os metadados que eles têm com elementos de dados (nome, número de seqüência, valor que é apenas uma corda, etc).

Essa classe tem como atributos de tipo aulas Validação Application Block validação.

Eu quero serializar-lo para XML e desserializar-lo. Verifique se todas as propriedades da classe, incluindo os atributos do bloco de aplicação validação sobreviver serialização.

alguma sugestão?

Nenhuma solução correta

Outras dicas

O framework .NET tem esta embutido, usando C # você faria assim:

// This code serializes a class instance to an XML file:
XmlSerializer xs = new XmlSerializer(typeof(objectToSerialize));

using (TextWriter writer = new StreamWriter(xmlFileName))
{
     xs.Serialize(writer, InstanceOfObjectToSerialize);
} 

E esse trecho é um exemplo de como desserializar uma volta arquivo XML para uma instância de classe:

// this code creates a class instance from the file we just made:
objectToSerialize newObject;
XmlSerializer xs = new XmlSerializer(typeof(objectToSerialize));

using (TextReader reader = new StreamReader(xmlFileName))
{
    newObject = (ObjectToSerialize) xs.Deserialize(reader);
}

Você deve marcar a sua classe com o atributo [Serializable] para que estes trabalhos. Se você quiser fazer a sua saída de XML um pouco mais bonita, você pode usar [XmlElement] e [XmlAttribute] atributos em suas propriedades de classe para tê-los serializar em seu esquema de escolha.

Ao dizer serialize, você usa média do mecanismo oficial de serialização, ou conseguir um efeito similar?

Se seus objetos são os feijões, você poderia usar o reflexo para escrever um serviço geral que toma uma classe e escreve seu nome e as propriedades da classe. Pode semelhante ler materiais do XML e gerar o objeto (que é o Apache digestor essencialmente faz).

O que disse Jonathon Holanda.

No entanto, você também perguntou sobre a validação. Se você usar o código de Jonathan publicado, todas as suas propriedades irá serialize e de-serialize corretamente. Mas se você realmente quiser verificar isso, existe uma propriedade que pode configurar com o seu objeto XmlSerializer para um esquema * .xsd para validar contra. Você pode criar o esquema com bastante facilidade de sua classe usando a função xsd.exe de linha de comando que está incluído no Visual Studio.

Além disso, parece que você pode querer controlar se certas propriedades de sua classe são serializados como atributos ou elementos. Jonathon tocou sobre isso, mas eu quero mostrar um exemplo:

[Serializable]
public class FormElement
{
   [XmlAttribute]
   public string Name {get; set;};

   [XmlAttribute]
   public int Sequence {get; set;};

   [XmlAttribute]
   public string Value {get; set;};

   [XmlElement]
   public Validation OnValidate{get; set;}

   [NonSerialized]
   public string UnimportantProperty {get; set;};

}

Finalmente, o tipo para cada propriedade que deseja serialize também deve ser serializado, e os tipos complicados devem ser serializado como XmlElements. Caso contrário, você não será capaz de fazê-lo.

XStream é um bom biblioteca java para fazer isso.

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