XML Deserialization - Converter o valor do atributo em classe automaticamente (.NET)
-
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!
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.