J'ai le code suivant: lors de l'initialisation du sérialisateur, je reçois l'exception: p> Pour être XML sérialisable, les types qui héritent d'iEnumérables doivent avoir un
Mise en œuvre de l'ajout (système.Object) à tous les niveaux de leur hiérarchie d'héritage. strong> p> J'ai cherché autour de vous et je suis arrivé à la conclusion que je dois ajouter une méthode d'addition publique (objet obj). Maintenant, je ne suis pas vraiment sûr de ce que cette méthode doit contenir ou quand elle est appelée, quelqu'un peut-il me dire dans la bonne direction? Est-ce que la méthode Quelques liens que j'ai trouvés utiles:
ici
ici < / p> très apprécié. p> p> ajoutez code> doit ajouter manuellement chaque rendez-vous? P>
3 Réponses :
Vous devez implémenter une méthode d'ajout capable de mettre un objet du type que votre iEnumérable contienne dans l'iEnumerable lorsque vous désérialisez votre FinditemSResult et les objets contenus donnés par elle. Un iénumérable n'est pas comme une liste, un élément désérialisé ne peut donc pas être de manière générique simplement dans un conteneur de quelque sorte. Il n'ya aucun moyen de savoir comment créer une classe qui implémente iEnumérable, vous devez explicitement écrire une méthode d'addition. P>
J'ai mis en œuvre la méthode d'ajout comme indiqué, malheureusement, la même exception est toujours soulevée. EDIT: B> Je n'ai pas appelé la méthode Ajouter - Comment ferais-je cela? Var Serializer = Nouveau XMLSerializer (rendez-vous.getType (). Ajouter ()) ;? Nope, ça ne marche pas ...
Votre méthode d'ajout prend-elle un objet d'objet de classe comme argument? Je pense que la méthode d'ajout serait appelée automatiquement lorsque vous essayez de désérialiser un objet implémentant iEnumerable.
Le Ajouter () code> doit avoir un seul argument du type des éléments dans l'objet code> iEnumerable code>. Par exemple, si
FINDITEMSRESULTS code> implémente
iEnumerable
add Ajouter (t t) code>. Si vous souhaitez
FINDITEMSRESULTS CODE> Pour être en lecture seule, vous pouvez convertir
FINDITEMSRESULES code> vers une liste via la méthode
Tolist () CODE> PROCÉDON ET SERIALISER LA LISTE que le
FINDITEMSRESULESSULES code> objet lui-même. P>
J'ai converti le FinditemsResults
Vous obtenez probablement cette erreur car quelque chose dans le graphique Objet FinditemSResults n'est pas directement sérialisé avec XMLSerializer. Vous pouvez essayer DatacontractSerializer, qui est un peu plus robuste, ou couvrant le graphe FinditemSResultsObject dans un format plus simple (POCO DTO)
J'ai couru dans ce même problème lors de la création d'un objet de résultat paginé. La réponse sélectionnée est essentiellement correcte mais je pensais que je voudrais simplement le formater un peu plus agréable et ajoute également un bout de mes propres.
En gros, j'ai mis en place l'ajout, mais je dois juste jeter une exception pour guider tous les futurs développeurs qui peuvent Essayez de l'appeler depuis en tant que jeu, je veux le garder en lecture seule. Le sérieleur fonctionne toujours bien, donc cela n'applique évidemment jamais ajouter lors de la sérialisation. Je peux courir dans des problèmes de dés-sérialisation, mais puisque cet objet est purement destiné à récupérer un ensemble de résultats, tout devrait être bon. P>
Voici ce que j'ai ajouté à la classe qui avait mis en œuvre iEnumérable: P>
public void Add(T value) { throw new NotSupportedException("Add is not supported for paged results. Try adding new items to the repository instead."); }