Asp.Net l'API Web de l'Erreur: Le "ObjectContent`1' type échoué à sérialiser le corps de la réponse pour le type de contenu application/xml; charset=utf-8'
Exemple le plus simple de ceci, j'obtiens une collection et essayez de sortie via l'API Web:
//GET api/items
public IEnumerable<Item> Get()
{
return MyContext.Items.ToList();
}
Et j'obtiens l'erreur:
Objet de type
Système.Les données.Objets.ObjectQuery`1[Dcip.L'Ams.BO.EquipmentWarranty]'
ne peuvent être converties en type
Système.Les données.De l'entité.DbSet`1[Dcip.L'Ams.BO.EquipmentWarranty]'
C'est une jolie commune erreur de le faire avec les nouvelles procurations, et je sais que je peux le résoudre en définissant:
MyContext.Configuration.ProxyCreationEnabled = false;
Mais qui défait le but de beaucoup de ce que je suis en train de faire. Est-il un meilleur moyen?
- Comment désactiver le proxy défaite de la sérialisation d'un objet?
- Sa un objet proxy, pas le POCO
- Désactiver le proxy à l'échelle mondiale signifie que vous n'obtenez pas l'utilisation de chargement paresseux propriétés de navigation. Je suis d'accord que ce n'est pas une bonne solution si vous devez les propriétés de navigation. Toujours à la recherche d'une réponse à moi-même pour ce problème.
Vous devez vous connecter pour publier un commentaire.
Je suggère de Désactiver la Création de Proxy seulement à l'endroit où vous n'avez pas besoin ou vous causer des ennuis. Vous n'avez pas à le désactiver à l'échelle mondiale, vous pouvez simplement désactiver l'actuel DB contexte via le code...
Ici je ne désactivé le ProxyCreation dans cette méthode, parce que pour chaque demande, il ya un nouveau DBContext créé et par conséquent je ne désactivé le ProxyCreation pour ce cas .
Espérons que cela aide
si vous avez les propriétés de navigation et vous ne voulez pas les faire non virtuel, vous devez à l'aide de JSON.NET et modifier la configuration dans App_Start à l'utilisation de JSON pas le XML!
après l'installation JSON.NET De NuGet, insérez ce code dans WebApiConfig.cs dans le Registre de la méthode
Si vous avez de navigation propriétés non virtuel. La cartographie sera encore du travail, mais il empêche la création de Dynamiques de Proxy entités qui ne peut pas être sérialisé.]
De ne pas avoir de lazy loading est bien dans un WebApi que vous n'avez pas une connexion permanente et que vous avez exécuté une .ToList() de toute façon.
J'ai juste désactivé le proxy classes par besoin:
Ce qui m'a aidé:
Ajoutez le code suivant dans
Application_Start
fonction de Mondiale.asax.csDans mon cas, l'objet retourné a une propriété avec un type qui n'avait pas de argumentless/constructeur par défaut. En ajoutant un zéro argument du constructeur de ce type, l'objet pourrait être sérialisé avec succès.