J'aime vraiment la méthode d'extension que TWith2Sugars a publiée here. J'ai rencontré un problème étrange cependant. Quand je mets cela dans une bibliothèque de classes partagées et appeler la fonction de sérialisation, je reçois l'erreur suivante:Problème avec les méthodes d'extension de sérialisation C#
The type MyType was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically.
Je regardais un peu et trouvé que les types XmlSerializer ne peut sérialiser qu'il est au courant. J'interprète cela comme signifiant des classes qui sont dans la bibliothèque de classes, pas le projet que je construis basé sur cette librairie.
Y a-t-il un moyen de contourner cela? Cette fonction peut-elle être placée dans une bibliothèque de classes ou doit-elle être dans chaque projet qui l'utilise?
Mise à jour:
je me suis dit ce qui était à l'origine du problème. J'avais le code suivant:
object o = new MyClass();
o.Serialize();
Cela causait l'erreur. Quand j'ai changé le code pour:
MyClass c = new MyClass();
c.Serialize();
Tout s'est bien passé. Donc, leçon apprise - n'essayez pas de (dé) sérialiser les objets génériques. Ce que j'ai le plus aimé à propos du lien que j'ai référencé, c'est que je n'avais pas besoin de mettre de tags d'attributs XML sur mes classes. La méthode d'extension vient de fonctionner. Pour terminer la question, j'accorderai la réponse à quiconque développera Marc's answer (Marc compris) avec un exemple de code illustrant l'utilisation de [XmlInclude].
Le problème que j'ai est que l'échec se produit en essayant de sérialiser Foo. Passer un extraType d'objet donne toujours la même erreur. –