Intentaba serializar un modelo de dominio y encontré un problema en el que necesitaba convertir un proxy dinámico en un POCO. El problema que encontré fue que existen referencias circulares a través de propiedades virtuales en el modelo. Aunque intenté usar [ScriptIgnore]
para que el serializador no analizara esas propiedades, todavía lo hace. Creo que esto se debe a que los objetos son proxies dinámicos y todavía hay algunos remanentes en las propiedades que hacen que el analizador ingrese (lo que a su vez causa un error de recursión "referencia circular" - Intenté limitar la recursión a 3 pasos, pero obtuve un error de "Pasos recursivos excedidos").¿Cómo puedo convertir un proxy dinámico en un POCO?
¿Cómo puedo convertir un objeto de un proxy dinámico en un POCO para que pueda ser serializado?
Editar: Ejemplo simple
public class One : BaseViewModel
{
public int OneId { get; set; }
public virtual ICollection<Two> Two { get; set; }
}
public class Two
{
public int TwoId { get; set; }
public int OneId { get; set; }
[ScriptIgnore]
public virtual One One { get; set; }
}
public abstract class BaseViewModel
{
public string AsJson()
{
var serializer = new JavaScriptSerializer();
return serializer.Serialize(this);
}
}
Los apoderados son una subclase del POCO que representan. En general, debería poder serializarlos perfectamente. ¿Puedes publicar un ejemplo pequeño pero completo de una clase que no puedes serializar? –
@EricJ. - Cuando se construye normalmente, la clase se serializa. Puedo publicar un ejemplo, pero no estoy seguro de cuánto ayudará, porque cuando se ejecute funcionará perfectamente. El problema principal es cuando la clase se crea una instancia con datos de ObjectContext. Esto sucede cuando todavía hay referencias dentro de las propiedades virtuales, aunque deberían estar vacías porque no estaban todas incluidas en la consulta de la base de datos. –
Ver la estructura de la clase que le está dando problemas puede arrojar algo de luz. –