XML Deserialization - Converter o valor do atributo em classe automaticamente (.NET)

StackOverflow https://stackoverflow.com/questions/421660

  •  05-07-2019
  •  | 
  •  

Pergunta

(vb.net/c#/etc)

Estou tendo problemas para descobrir como fazer um pouco de mágica de desserialização. Atualmente, a desserialização padrão funciona bem, incluindo as enums, mas agora Eu quero converter um atributo em uma classe. Oh! O que eu era pensamento!

Meu XML se parece um pouco assim:

....
<review user="..." version="2.2">...</review>

E isso para minha propriedade/classe:

[XmlAttribute("version")]
public MyVersion Version { get; set; }

class MyVersion  {
    // equality overloaded
    // can ctype() from string to MyVersion
    // constructor that takes a single string, etc
}

Como posso ajudar o serializador, para que ele possa desservar automaticamente minha propriedade de string nessa classe? Preciso modificar a classe Myversion de alguma forma ou alterar a definição da propriedade?

  • Eu faço não Deseja ter que substituir quaisquer métodos como OndeSerialized, etc. Não vale a pena para este projeto.

Se isso não puder ser feito com o Deserializer XML padrão, isso seria bom o suficiente para saber. Há muitas coisas para as quais não é bom, então não ficarei surpreso.

Obrigado!

Foi útil?

Solução

Isso não é apoiado de maneira declarativa. Você precisará implementar ixmlSerializable na classe pai (a que é serializada para um elemento) e executar a conversão entre a string e o tipo MyValue manualmente.

Outras dicas

Você pode fazer isso com bastante facilidade - apenas não como uma ação de deseralização.

Use o XSD para criar suas classes para deseralização. Agora, essas são todas as classes parciais para que você possa escrever uma nova parte da classe de revisão (que contém o atributo 'versão') e adicionar um método que obtém/define a versão.

No método get simples, crie uma nova instância dessa classe e, no método set, atualize a versão existente da classe de versão fornecida.

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