This question peut être très similaire à mon, mais je ne peux pas voir la réponse dont j'ai besoin. J'ai une classe, appelée CASM
, qui a un List<Action>
. Je veux sérialiser cette classe (en utilisant le BinaryFormatter
ou quelque chose de similaire). Cette classe et toutes les classes référencées dans les Action
ont les attributs [Serializable]
et [NonSerializable]
corrects.Sérialiser une liste de délégués anonymes
Le problème vient quand sérialisation est tenté - il donne cette erreur:
Type 'CASM.CASM+<>c__DisplayClass2c' in Assembly 'CASM, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null' is not marked as serializable.
Ce <>c__DisplayClass2c
est une classe interne autogenerated qui détient les différents types de délégué anonyme que je me sers dans ma demande. Cependant, comme on peut le voir sur l'image ci-dessous, il est [Serializable]
:
alt text http://bayimg.com/image/maebbaacj.jpg
Quelle serait la meilleure façon de changer ma demande si cela ne fonctionne? Créer ma propre classe de type <>c__DisplayClass2c
et la rendre sérialisable? Ou y a-t-il un meilleur moyen?
EDIT: En fin de compte je viens de faire ma propre classe, au lieu de celui généré automatiquement. Je contribue également au débogage, en ayant un nom descriptif plutôt que juste b__12()
.
Vous dites que la classe est autogénérée - comment cela se fait-il? Le contrôle-t-il? Est-il généré par un composant tiers? –
Il est généré automatiquement par le compilateur - il possède l'attribut [CompilerGenerated]. Je pense que c'est juste une classe/endroit pour stocker un certain nombre de délégués anonymes très semblables (ils sont tous vides et acceptent une chaîne [] comme paramètre dans ce cas). –
Alors oui, essayez de générer votre propre classe. Vous pouvez également avoir un problème avec les méthodes anonymes (je ne l'ai pas essayé, donc je ne sais pas), auquel cas, essayez des versions non anonymes. Si cela ne fonctionne pas, vous pouvez d'abord transformer les méthodes en expressions (celles-ci devraient être sérialisables) –