Estoy usando Ef 4.1 y tengo un POCO de objeto me gustaría serializar a JSON, he leído que hay un problema de hacerlo cuando se utiliza la carga diferida, pero no estoy seguro de que puedo porque un Message
puede tener una colección de Message
.
Hay alguna forma de hacer esto? sirialize este tipo de objeto en JSON?
Mi Message
objeto se ve como:
public class Message
{
[Key]
public int Id { get; set; }
public int? ParentId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime? LastModified { get; set; }
public virtual User User { get; set; }
public virtual Message Parent { get; set; }
public virtual ICollection<Message> Children { get; set; }
}
El problema es que las referencias circulares. Una manera fácil de evitar esto es usar Json.Net http://james.newtonking.com/projects/json-net.aspx en lugar de la predeterminada MVC json serializador. La última versión de Json.Net serializar objetos con referencias circulares fuera de la caja. http://james.newtonking.com/projects/json/help/PreserveObjectReferences.html para obtener más información sobre el problema
ReferenceLoopHandling.Ignore
y una costumbreContractResolver
hizo el truco 🙂Con ganas de carga usando Include(). Ejemplo de linq:
Que dirá EF cargar la navegación de los usuarios de derecho de propiedad de distancia en lugar de la carga diferida, y el serializador no debe tener ningún problema con ella.
Cómo sobre esto:
[Serializable]
virtual
propiedad serializado bien para la recogida y el único propiedades: i.imgur.com/9mkW3.pngBien, vamos a ir por partes.
¿Por qué está sucediendo esto?
Porque tiene propiedades virtuales. Si usted está usando EF usted realmente necesita si usted está utilizando la carga Diferida. Usted puede configurar su EF no puede hacer esto por este ejemplo:
donde el contexto es su ObjectContext o DbContext… esto asumiendo que usted está utilizando EF. Pero para la mayoría de los casos este no es un buen planteamiento.
Posible Solución
Como siempre digo: «no hay buenas o malas soluciones, sólo diferentes maneras y depende del contexto», diciendo que, usted puede crear objetos dinámicos.
En caso de que usted sólo tiene que serializar un objeto único, usted puede hacer algo como esto
En caso de tener una lista, bien, usted puede hacer esto:
He intentado hacer esto tan genérica como puedo. Espero que esto pueda ayudar a alguien!!
Saludos y que tengan un muy buen día! 🙂