Question

Je suis en train de sérialisation un objet et la SerializationException suivante est lancée:

Type 'System.Linq.Enumerable + d__71`1 [[System.String, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089]] à l'Assemblée « System.Core, Version = 4.0.0.0 , Culture = neutral, PublicKeyToken = b77a5c561934e089' est pas marqué comme sérialisable.

Où se trouve cet objet dans mon code? Comment puis-je savoir? Le graphique de l'objet est assez grand.

Était-ce utile?

La solution

Essayez d'utiliser réflecteur et voyez si vous pouvez déterminer où le d__71`1 de type anonyme est utilisé dans votre code.

Autres conseils

me semble que si vous avez enregistré les résultats de l'appel d'une méthode de recenseur sans convertir le résultat à une liste.

Lorsque vous avez une méthode comme ceci:

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

Le compilateur transforme ceci en un objet imbriqué avec un nom comme celui que vous voyez (avec un nom que vous ne pourriez jamais vous créer en raison de la + embarqué)

Si vous stockez ensuite une référence à cet objet à l'intérieur quelque chose que vous essayez de sérialiser, vous aurez l'exception notée par l'OP.

La « solution » est de faire en sorte que vos objets sérialisés convertissent toujours les missions IEnumerable <> dans des listes. Au lieu de cela

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

vous devez écrire:

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

Essayez de sérialisation un objet (type simple) à la fois et voir quand il explose. Vous pouvez le faire manuellement ou par réflexion.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top