3 messaggi dal 17 dicembre 2010
Salve,
sto provando ed esporre in un metodo, una classe generata con l'EF, ma gia' all'avvio mi da il seguente errore:

Impossibile serializzare il membro Persona.Titolarita di tipo System.Collections.Generic.ICollection`1[[Titolarita, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] perché è un'interfaccia.

L'ambiente e' il Visual Studio 2012 con Entity Framework - Code First.

In particolare, il metodo che va in errore e':

 
<WebMethod()> _
Public Function Load(p_id As Int32) As Persona
   Dim risp As Persona = Nothing
   Dim v_ctx As ArchivioContainer = New ArchivioContainer()

   Dim v_persona = (From c In v_ctx.Persone
                   Where c.IDPersone = p_id
                  Select c).FirstOrDefault

   If v_persona IsNot Nothing Then
      risp = v_persona
   End If

   Return risp
End Function


e l'attributo Titolarita e' una collection.
Ho provato anche ad utilizzate:

v_ctx.Configuration.ProxyCreationEnabled = False

ma senza successo.

Sto cercando una soluzione che non sia quella di dover creare altre classi DTO su cui fare il mapping, anche perche' che questa cosa la facevo gia' prima di passare al VS2012.
Sto usando l'ultima release perchè nel codice mi trovero' a lavorare anche con oggetti spaziali, non trattati nella precedente versione.

Ogni consiglio e' bene accetto, visto che ho fatto molte prove, ma fino ad ora non sono riuscito a trovare nessuna soluzione.
Grazie
75 messaggi dal 24 agosto 2006
"luigirusso" <luigirusso> ha scritto nel messaggio news:395591@...
Salve,
sto provando ed esporre in un metodo, una classe generata con l'EF, ma gia'
all'avvio mi da il seguente errore:
Impossibile serializzare il membro Persona.Titolarita di tipo System.Collections.Generic.ICollection`1[Titolarita, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] perché è un'interfaccia. L'ambiente e' il Visual Studio 2012 con Entity Framework - Code First. In particolare, il metodo che va in errore e':
<WebMethod()> _
Public Function Load(p_id As Int32) As Persona
Dim risp As Persona = Nothing
Dim v_ctx As ArchivioContainer = New ArchivioContainer()
Dim v_persona = (From c In v_ctx.Persone
Where c.IDPersone = p_id
Select c).FirstOrDefault
If v_persona IsNot Nothing Then
risp = v_persona
End If
Return risp
End Function

Ciao.
Devi serializzare l'oggetto ma prima devi creare una classe anonima cossì:
Dim v_persona = (From c In v_ctx.Persone.Where(function(r) r.IDPersone = p_id).FirstOrDefault
select new with{.cognome = c.cognome, .nome = c.nome})

e poi la serializzazione così:

Dim jsonresult As String = String.Empty
Dim serializer As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer()
jsonresult = serializer.Serialize(v_persona)
return jsonresult

Lato javascript fai poi il parse della stringa json per ricostruire l'oggetto

Buon lavoro

Pino Saffioti

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.