Boas galera,

Neste post vamos falar de WCF e uma situação comum para quem trabalha com WCF e transporta listas de objetos serializados.

Cenário: Imagina que você tem uma lista de Clientes que será enviada pelo WCF e cada cliente tem uma propriedade chamada ‘CidadeAtual’ que é um objeto do tipo Cidade.

Certo, até ai tudo bem, agora talves vocês não tenham percebido, mas se voce tiver 20 clientes com a mesma Cidade, o objeto Cidade será serializado 20 vezes aumentando consideravelmente o tamanho da mensagem que será trafegada.

Isso também se aplica quando você tem uma estrutura de objetos que geram uma referencia circular, isso pode fazer um loop e a mensagem irá crescendo até estourar o limite de tamanho da mensagem gerando assim um erro.

Solução: Na classe que será trafegada, adicione no DataContract um ‘IsReference = true’, isso fará com que cada cidade será serializada na sua primeira aparição mas nas subsequentes será criada apenas uma referência para a primeira.

Veja o exemplo abaixo:

[DataContract]
public class Cliente
{
     [DataMember]
     public string Nome { get; set; }

     [DataMember]
     public Cidade CidadeAtual { get; set; }
}

[DataContract(IsReference = true)]
public class Cidade
{
     [DataMember]
     public string Nome { get; set; }
}

É isso ae pessoal, fica ae mais esta dica bastante útil e se gostou curta e compartilhe o nosso trabalho.

Um forte abraço a todos e até a próxima…