Bonjour à tous,

J'ai un problème avec du code généré sur ASP.NET MVC 4 WEB API (.net 4.5)
J'ai généré mon api controller avec un crud sur entity framework.

lorsque j'appel http://localhost:49350/API/appelOffreAPI , je tombe sur ce message d'erreur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<Error><Message>Une erreur s’est produite.</Message>
 
<ExceptionMessage>Échec de la sérialisation du corps de la réponse par le type « ObjectContent`1 » pour le type de contenu « application/xml; charset=utf-8 ».</ExceptionMessage>
 
<ExceptionType>System.InvalidOperationException</ExceptionType><StackTrace/><InnerException><Message>Une erreur s’est produite.</Message>
 
<ExceptionMessage>Le type 'System.Data.Entity.DynamicProxies.appelOffre_6BD464C63E1E9FC18FA1B225FB275E245EE698BAB7172F027BB12C62A37D9872' avec le nom de contrat de données 'appelOffre_6BD464C63E1E9FC18FA1B225FB275E245EE698BAB7172F027BB12C62A37D9872:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies' n'est pas attendu. Utilisez un DataContractResolver ou ajoutez tous les types non connus statiquement à la liste des types connus, par exemple en utilisant l'attribut KnownTypeAttribute ou en les ajoutant à la liste des types connus qui est transmise à DataContractSerializer.</ExceptionMessage>
 
<ExceptionType>System.Runtime.Serialization.SerializationException</ExceptionType><StackTrace>   à System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType)
   à System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiType(XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle objectTypeHandle, Type objectType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle, Type declaredType)
   à System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)
   à WriteArrayOfappelOffreToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , CollectionDataContract )
   à System.Runtime.Serialization.CollectionDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context)
   à System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)
   à System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType)
   à System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiTypeAtTopLevel(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle originalDeclaredTypeHandle, Type graphType)
   à System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
   à System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
   à System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
   à System.Runtime.Serialization.DataContractSerializer.WriteObject(XmlWriter writer, Object graph)
   à System.Net.Http.Formatting.XmlMediaTypeFormatter.<>c__DisplayClass7.<WriteToStreamAsync>b__6()
   à System.Threading.Tasks.TaskHelpers.RunSynchronously(Action action, CancellationToken token)</StackTrace></InnerException></Error>
Voici le controller en question :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
    public class APIappelOffreController : ApiController
    {
        private GAOContainer db = new GAOContainer();
 
 
        // GET api/APIappelOffre
        public IEnumerable<appelOffre> GetappelOffres()
        {
                var appeloffre = db.appelOffre.Include(a => a.entreprise).Include(a => a.statutAppelOffre).Include(a => a.source);
                return appeloffre.AsEnumerable();
        }

J'ai essayé déjà de supprimer la création de proxy mais c'est utile visiblement pour la sérialisation, et de supprimer le lazyloading sans résultat.

Je vous remercie de votre aide.
Cordialement.