none
Como customizar a serialização feita pelo WCF RRS feed

  • 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
    quarta-feira, 15 de dezembro de 2010 16:39

Respostas

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
    sexta-feira, 17 de dezembro de 2010 10:41
    Moderador
  • 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....


    segunda-feira, 10 de janeiro de 2011 13:17
  • 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://www.danrigsby.com/blog/index.php/2008/03/07/xmlserializer-vs-datacontractserializer-serialization-in-wcf/

    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
    quinta-feira, 3 de fevereiro de 2011 00:01