Domanda

Sto cercando di serializzare un oggetto e il seguente SerializationException è gettato:

Tipo 'System.Linq.Enumerable + d__71`1 [[System.String, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089]]' in assemblea 'System.Core, Version = 4.0.0.0 , Culture = neutral, PublicKeyToken = b77a5c561934e089' non è contrassegnato come serializzabile.

Dove si trova questo oggetto nel mio codice? Come faccio a sapere? Il grafico oggetto è abbastanza grande.

È stato utile?

Soluzione

Provare a utilizzare Reflector e vedere se è possibile determinare dove il tipo anonimo d__71`1 viene utilizzato nel codice.

Altri suggerimenti

Suoni a me come se hai memorizzato i risultati della chiamata di un metodo enumeratore senza convertire il risultato a un elenco.

Quando si ha un metodo come questo:

public IEnumerable<string> GetMyWidgetNames()
{
    foreach (var x in MyWidgets)
    { 
        yield return x.Name;
    }
}

Il compilatore trasforma questo in un oggetto nidificato con un nome come quello che stai vedendo (uno con un nome che non avrebbe mai potuto crea a causa del + embedded)

Se poi si memorizza un riferimento a questo oggetto dentro qualcosa si tenta di serialise, si otterrà l'eccezione notato dal PO.

La "correzione" è quello di garantire che i vostri oggetti serializzati convertono sempre qualsiasi IEnumerable <> assegnazioni in elenchi. Al posto di questo

public IEnumerable<string> WidgetNames { get; set; }

è necessario scrivere:

public IEnumerable<string> WidgetNames
{
    get { return mWidgetNames; }
    set
    {
        if (value == null)
            mWidgetNames= null
        else mWidgetNames= value.ToList();
    }
}
private List<string> mWidgetNames;

Prova a serializzare un oggetto (di tipo singolo) alla volta e vedere quando si fa saltare in aria. È possibile farlo manualmente o attraverso la riflessione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top