Usuário com melhor resposta
Como customizar a serialização feita pelo WCF

Pergunta
-
Olá,
Estou tentando construir um serviço WCF que ao retornar um certo objeto a serialização deste seja feita de forma customizada. Por exemplo: Eu tenho uma classe Cliente que tem uma lista de objetos Endereço. Na hora de serializar o objeto cliente eu não quero que a lista de endereços seja serializada e consequentemente retornada a aplicação que chama esse serviço.
Eu sei da existência do atributo <IgnoreDataMember()>, mas não quero tem que colocar este atributo em todas as minhas classes, pois o que eu quero é um procedimento padrão, sempre que houver uma lista, como no exemplo, ou algum outro tipo de coleção ou objeto, eu não quero que esta seja serializada.
Alguém sabe como construir uma serialização customizada no WCF?
Marcos Latchuk
Respostas
-
Boas Marcos,
Se você não quiser tocar nas suas classes para refinar a serialização, então acho que a única forma é criando um serializador customizado e fazer com o que o WCF o utilize para serializar as informações, e ai você dá um bypass nos tipos de propriedades que são do tipo coleção/array.
Mas ainda há uma outra preocupação: que é evitar que elas também apareçam no WSDL, para que os clientes não a vejam.
http://www.israelaece.com- Sugerido como Resposta AndreAlvesLimaModerator terça-feira, 8 de fevereiro de 2011 12:20
- Marcado como Resposta AndreAlvesLimaModerator sábado, 12 de fevereiro de 2011 12:40
-
Caro Marcos,
Problema interessante o seu.
Estava pensando se um façade genérico <T> específico para representar a serialização não resolveria seu problema. Dessa forma voce não precisaria alterar todas as suas classes....
Outra coisa é que voce poderia implementar Custom Serialization e fazer o processo a mão, como no seguintes exemplos:
http://msdn.microsoft.com/en-us/library/ms732038.aspx
Espero ter ajudado!
Hamilton.
HJ- Sugerido como Resposta hamiltonj terça-feira, 8 de fevereiro de 2011 09:03
- Marcado como Resposta AndreAlvesLimaModerator sábado, 12 de fevereiro de 2011 12:40
Todas as Respostas
-
Boas Marcos,
Se você não quiser tocar nas suas classes para refinar a serialização, então acho que a única forma é criando um serializador customizado e fazer com o que o WCF o utilize para serializar as informações, e ai você dá um bypass nos tipos de propriedades que são do tipo coleção/array.
Mas ainda há uma outra preocupação: que é evitar que elas também apareçam no WSDL, para que os clientes não a vejam.
http://www.israelaece.com- Sugerido como Resposta AndreAlvesLimaModerator terça-feira, 8 de fevereiro de 2011 12:20
- Marcado como Resposta AndreAlvesLimaModerator sábado, 12 de fevereiro de 2011 12:40
-
OK, Meu problema é bem parecido.
Utilizo o AdoEntity + postgres. Criando o arquivo de mapeamento atraves do EdmGen2.
O ruim de colocar na mão o atributo IgnoreDataMember é que sempre que gerar o mapeamento novamente terá que ser refeito... e no caso de realmente querer passar a lista para o cliente não conseguiria....
não existe alguma maneira de o wcf simplesmente verificar se a lista do objeto não esta nulo..... antes do lazy...
ou simplesmente desligar o lazy antes de serializar o objeto....
-
Caro Marcos,
Problema interessante o seu.
Estava pensando se um façade genérico <T> específico para representar a serialização não resolveria seu problema. Dessa forma voce não precisaria alterar todas as suas classes....
Outra coisa é que voce poderia implementar Custom Serialization e fazer o processo a mão, como no seguintes exemplos:
http://msdn.microsoft.com/en-us/library/ms732038.aspx
Espero ter ajudado!
Hamilton.
HJ- Sugerido como Resposta hamiltonj terça-feira, 8 de fevereiro de 2011 09:03
- Marcado como Resposta AndreAlvesLimaModerator sábado, 12 de fevereiro de 2011 12:40