Entity framework sérialiser POCO en JSON
Je suis en utilisant Ef 4.1 et j'ai un POCO objet que je tiens à sérialiser en JSON, j'ai lu il y a un problème lors de l'utilisation de chargement paresseux, mais je ne suis pas sûr que je peux, car un Message
pouvez avoir une collection de Message
.
Est-il possible de faire cela? sirialize ce genre d'objet en JSON?
Mon Message
objet ressemble:
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; }
}
Vous devez vous connecter pour publier un commentaire.
Le problème est que les références circulaires. Un moyen facile d'éviter cela est d'utiliser Json.Net http://james.newtonking.com/projects/json-net.aspx au lieu de la valeur par défaut MVC sérialiseur json. La dernière version de Json.Net va sérialiser des objets avec des références circulaires de la boîte. http://james.newtonking.com/projects/json/help/PreserveObjectReferences.html pour plus d'info sur le problème
ReferenceLoopHandling.Ignore
et personnaliséContractResolver
a fait le tour 🙂Désireux de charge à l'aide de Include(). Exemple de linq:
Qui dira EF charger la navigation de l'Utilisateur le droit de propriété de suite au lieu de chargement paresseux, et le sérialiseur devriez avoir aucun problème avec elle alors.
Comment à ce sujet:
[Serializable]
virtual
propriété sérialisé tout aussi bien pour la collecte et le seul propriétés: i.imgur.com/9mkW3.pngBien, permet de passer par les parties.
¿Pourquoi est-ce qui se passe?
Parce que vous avez propriétés virtuelles. Si vous utilisez EF-vous réellement besoin d'eux si vous utilisez un chargement différé. Vous pouvez configurer votre EF pour ne pas faire ceci par exemple: c'est
où le contexte est votre ObjectContext ou DbContext... ce que vous êtes à l'aide de EF. Mais pour la plupart des scénarios, ce n'est pas une bonne approche.
Solution Possible
Comme je dis toujours: "il n'y a pas de bonnes ou de mauvaises solutions, juste des façons différentes et il dépend du contexte", en disant que, vous pouvez créer des objets dynamiques.
Dans le cas où vous n'avez qu'à sérialiser un objet unique, vous pouvez faire quelque chose comme ceci
Dans le cas où vous avez une liste, eh bien, vous pouvez faire ceci:
J'ai essayé de faire cela aussi générique que je peux. J'espère que cela peut aider quelqu'un!!
Meilleures salutations et une très belle journée! 🙂