WCF - Serializando objeto con otro objeto anidado

30/04/2009 - 10:40 por lobezno | Informe spam
hola a todos,
tengo problemas al serializar objetos "Padre-hijo" con WCF.

Os paso código que es más fácil verlo así, q explicarlo.

[DataContract]
public class Peticion
{
string _titulo;
IList<Requisito> _requisitos = new List<Requisito>;

[DataMember]
public string Titulo
{
get { return _titulo; }
set { _titulo = value; }
}

[DataMember]
public IList<Requisito> Requisitos
{
get { return _requisitos; }
set { _requisitos = value; }
}

public void AddRequisito(Requisito r, Peticion p)
{
r.Padre = p;
this.Requisitos.Add(r);
}
}

[DataContract]
public class Requisito
{
private string _nombre;
private Peticion _padre;

[DataMember]
public string Nombre
{
get { return _nombre; }
set { _nombre = value; }
}

[DataMember]
public Peticion Padre
{
get { return _padre; }
set { _padre = value; }
}
}

Con esta definición de clases, tengo un servicio que devuelve un objeto de
tipo Peticion (que internamente tiene una lista de requisitos). Con esto me
da un error al retornar el objeto:
"Error al recibir la respuesta HTTP a
http://localhost:8731/ServicioPeticion/. Puede deberse a que el enlace del
extremo de servicio no usa el protocolo HTTP. También puede deberse a que el
servidor anula un contexto de solicitud HTTP (posiblemente por el cierre del
servicio). Consulte los registros del servidor para obtener más información.
"

Por reducción al absurdo, veo que el problema está al decirle a un objeto
requisito, que su Padre, es el objeto Peticion. OJO, no falla al hacer:
r.Padre = p;, falla en el return del servicio, pero si quito esa linea, el
servicio funciona bien, de hecho, si quito el [DataMember] de Padre, tb
funciona bien, por lo que deduzco q falla la serializacion del objeto
Peticion.

Por algún motivo, parece que no sabe serializar el objeto Peticion, que
tiene un Requiisto que a su vez tiene el mismo objeto Peticion en su
propiedad padre :)

Alguna idea de cómo puedo solucionar esto???

Muchas gracias,
Un saludo!
 

Leer las respuestas

#1 Willy Mejia
30/04/2009 - 16:56 | Informe spam
Utiliza ServiceKnownType para especificar el tipo "Peticion" en tu
ServiceContract:
http://msdn.microsoft.com/library/s...ibute.aspx

Saludos,
Willy Mejía


"lobezno" escribió en el mensaje de
noticias:
hola a todos,
tengo problemas al serializar objetos "Padre-hijo" con WCF.

Os paso código que es más fácil verlo así, q explicarlo.

[DataContract]
public class Peticion
{
string _titulo;
IList<Requisito> _requisitos = new List<Requisito>;

[DataMember]
public string Titulo
{
get { return _titulo; }
set { _titulo = value; }
}

[DataMember]
public IList<Requisito> Requisitos
{
get { return _requisitos; }
set { _requisitos = value; }
}

public void AddRequisito(Requisito r, Peticion p)
{
r.Padre = p;
this.Requisitos.Add(r);
}
}

[DataContract]
public class Requisito
{
private string _nombre;
private Peticion _padre;

[DataMember]
public string Nombre
{
get { return _nombre; }
set { _nombre = value; }
}

[DataMember]
public Peticion Padre
{
get { return _padre; }
set { _padre = value; }
}
}

Con esta definición de clases, tengo un servicio que devuelve un objeto de
tipo Peticion (que internamente tiene una lista de requisitos). Con esto
me
da un error al retornar el objeto:
"Error al recibir la respuesta HTTP a
http://localhost:8731/ServicioPeticion/. Puede deberse a que el enlace del
extremo de servicio no usa el protocolo HTTP. También puede deberse a que
el
servidor anula un contexto de solicitud HTTP (posiblemente por el cierre
del
servicio). Consulte los registros del servidor para obtener más
información.
"

Por reducción al absurdo, veo que el problema está al decirle a un objeto
requisito, que su Padre, es el objeto Peticion. OJO, no falla al hacer:
r.Padre = p;, falla en el return del servicio, pero si quito esa linea, el
servicio funciona bien, de hecho, si quito el [DataMember] de Padre, tb
funciona bien, por lo que deduzco q falla la serializacion del objeto
Peticion.

Por algún motivo, parece que no sabe serializar el objeto Peticion, que
tiene un Requiisto que a su vez tiene el mismo objeto Peticion en su
propiedad padre :)

Alguna idea de cómo puedo solucionar esto???

Muchas gracias,
Un saludo!

Preguntas similares