Usuário com melhor resposta
Erro de serialização de entity object em um webservice asmx

Pergunta
-
Olá.
O cenário é o seguinte:
a) Um banco de dados com duas tabelas: Bairro e Pessoa com relacionamento 1:n, ou seja, Bairro exporta chave primária para Pessoa;
b) Estou tentando criar um webservice que retorne um objeto Pessoa com o seu respectivo objeto Bairro, mas obtive o seguinte erro:
Não é possível serializar o membro Bairro.Pessoa do tipo System.Collections.Generic.ICollection`1[[Pessoa, App_Code.hw3dzrcp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]] porque ele é uma interface.
Como posso resolver este problema?
O código é o seguinte:using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Data.Entity; using System.Xml.Serialization; [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class WebService : System.Web.Services.WebService { public WebService() { } [WebMethod] public Pessoa ObterPessoa(Guid id) { DatabaseEntities entities = new DatabaseEntities(); var pessoas = from p in entities.Pessoa where p.Id == id select p; return pessoas.FirstOrDefault(); } }
Respostas
-
Gustavo,
Sugiro que vc retorne objetos baseados classes POCO (formadas apenas por propriedades) para devolver estas informações.
O erro que vc está enfrentando acontece pq não há como serializar entidades, sem que se mantenha o estado das mesmas (fica impossível desse modo trabalhar offline).
- Sugerido como Resposta Renato GroffeMVP terça-feira, 29 de março de 2016 19:43
- Marcado como Resposta Marcos SJ quarta-feira, 30 de março de 2016 14:46
Todas as Respostas
-
Gustavo,
Sugiro que vc retorne objetos baseados classes POCO (formadas apenas por propriedades) para devolver estas informações.
O erro que vc está enfrentando acontece pq não há como serializar entidades, sem que se mantenha o estado das mesmas (fica impossível desse modo trabalhar offline).
- Sugerido como Resposta Renato GroffeMVP terça-feira, 29 de março de 2016 19:43
- Marcado como Resposta Marcos SJ quarta-feira, 30 de março de 2016 14:46
-
Olá, Renato.
Obrigado pela dica. Já estou lendo sobre POCO.
Você poderia me dizer se existe uma forma de criar uma classe POCO a partir da classe criada automaticamente pelo EntityDataModel, sem que eu tenha que declarar todas as propriedades, reescrevendo uma a uma? Ou talvez me mostrar um exemplo de como posso ajustar o meu código para que funcione corretamente?
- Editado gustavopreis terça-feira, 29 de março de 2016 20:28