Usuário com melhor resposta
Serialização DataContract Condicional

Pergunta
-
Boa noite amigos!
Estou trabalhando com serialização de classes que me gera a seguinte estrutura de xml por exemplo:
<classe1> <SubClasse1> <subClasse2> <subclasse3> </classe1>
Até ai tudo bem, todas as classes tem o atributo DataContract para poder serializa-la.
Eu gostaria de saber como poderia fazer para que a classe seja serializada condicionalmente, ou seja, caso não satisfazer uma determinada condição, ela não ser serializada, por exemplo: Se a subclasse2 não atender a condição, ela não seria serializada. Ai o xml ficaria assim:
<classe1> <SubClasse1> <subclasse3> </classe1>
Poderiam me dar uma ajuda
Respostas
-
Mas como você está fazendo o seu método que retorna essas classes neste modo !
- Marcado como Resposta Bernoulthy terça-feira, 29 de abril de 2014 01:04
-
Ola Rodolfo,
Consegui resolver adicionando um método boleano na propriedade da classe, ficou da seguinte maneira:
[DataMember(IsRequired = false, EmitDefaultValue = false)] public cSubClasse2 SubClasse2 { get; set; } public bool ShouldSerializeSubClasse2() { if(// condição) return true; else return false; }
Parece que é obrigatorio que o método seja publico e que tenha o prefixo "ShouldSerialize", parece se tratar de um partner que eu não conhecia. Vou dar uma pesquisada.
Vlw
- Editado Bernoulthy terça-feira, 29 de abril de 2014 01:05
- Marcado como Resposta Bernoulthy terça-feira, 29 de abril de 2014 01:05
Todas as Respostas
-
Olá,
Na propriedade, dentro do DataMember, adiciona o parametro "EmitDefaultValue = false", pois caso o objeto for null ele não vai serializar. Caso queira uma condição você terá que usar Reflection. E dependendo da quantidade de classe e propriedades o uso de Reflection pode tornar sua aplicação bem lenta.
Espero ter ajudado, qualquer coisa só chamar ;)
Att,
Rodolfo Oliveira
- Editado Rodolfo Ferreira Oliveira terça-feira, 29 de abril de 2014 00:22
-
Mas como você está fazendo o seu método que retorna essas classes neste modo !
- Marcado como Resposta Bernoulthy terça-feira, 29 de abril de 2014 01:04
-
Ola Rodolfo,
Consegui resolver adicionando um método boleano na propriedade da classe, ficou da seguinte maneira:
[DataMember(IsRequired = false, EmitDefaultValue = false)] public cSubClasse2 SubClasse2 { get; set; } public bool ShouldSerializeSubClasse2() { if(// condição) return true; else return false; }
Parece que é obrigatorio que o método seja publico e que tenha o prefixo "ShouldSerialize", parece se tratar de um partner que eu não conhecia. Vou dar uma pesquisada.
Vlw
- Editado Bernoulthy terça-feira, 29 de abril de 2014 01:05
- Marcado como Resposta Bernoulthy terça-feira, 29 de abril de 2014 01:05