none
Erro de serialização de entity object em um webservice asmx RRS feed

  • 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();
        }
    }

    terça-feira, 29 de março de 2016 19:05

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
    terça-feira, 29 de março de 2016 19:43

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
    terça-feira, 29 de março de 2016 19:43
  • 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
    terça-feira, 29 de março de 2016 20:27