J'ai créé une classe C #: mais est lorsque j'utilise XMLSerializer Convert en chaîne XML. Le résultat n'est pas le même que ci-dessous XML. P> Quel est le problème de ma classe C #? Je veux utiliser XmlSerializer pour aller sur le résultat au lieu d'utiliser
Xmldocument. P> Des idées? Merci d'avance! P> ci-dessous est mon code C # et le résultat de la sortie: P > xml: p>
4 Réponses :
Vous ne pouvez pas sérialiser la classe de votre question à l'aide des outils de sérialisation standard de sorte qu'il dispose d'entrées pour générer xml em> sortie que vous souhaitez - avec Une autre solution sera - comme a déclaré utilisateur Alexandr en commentaire à ma réponse - Pour hériter de votre Lors de la série de sérialisation de votre question, en supposant que votre adéquation xmlroot, xmelement, xmlarray et xmlarrayitem attributs comme suit: p> vous obtiendrez xml em > Sortie comme suit: p> enregistrements code> champs sur book code> classe. P> Books code> classe pour la sérialisation personnalisée. Pour voir des exemples de ixmlSerializable CODE> Mise en œuvre Visitez ces liens: Stackoverflow répond , Article de codeProject . P> Livres Code> Classe à partir de Liste Book Code> Classe enregistrements code> du type de classe hérité de Liste
T'es sûr de ça? Parce que je pense que je pense que je l'ai fait il y a quelque temps en ayant la classe racine ( livres code> dans ce cas) étendre list Xmelement code> -Attribuer ...
@ALXANDR La liste d'héritage est une autre option - il change d'autres conditions du problème. +1 pour une bonne idée.
Je suppose également que cela est faisable sans hériter de la liste, simplement en fournissant une méthode ajouter code>, mais je ne sais pas comment les internes du XMLSérialiseur fonctionnent ...
@ALXANDR Après une recherche rapide avec Google, j'ai trouvé des solutions avec Ajouter Code> Méthode - Ce que je suis venu n'est que des variations différentes avec ixmlSerializable code>. Appréciera les liens vers des solutions alternatives.
Ce n'était qu'une supposition basée sur le fait que la méthode Ajouter code> active des trucs comme var a = nouvelle liste Liste ixmlSerializable code>, bien qu'il s'agisse d'être un constructeur de sérialisation pour tout ce que je sais. Je viens de comprendre que depuis que .NET donne une signification particulière à une méthode code> ajouter code>, peut-être que le XMLSerializer fait aussi ...
Je n'ai pas trouvé de constructeur de sérialisation en utilisant justdecompile. Peut-être que list ilist icollection
J'ai fait passer la modification suivante à votre code de classe. Je ne suis pas en mesure de dupliquer la sérialisation XML à l'aide du sérialiseur par défaut, car il ne dupliquera pas l'élément "Enregistrement" sans lui donner un élément de conteneur. sérialiser cela me donne la sortie suivante p> à l'aide de ce code de test p>
Nous ne pouvons pas laisser le
Les livres sont l'élément de conteneur pour le livre. C'est ainsi que cela sait qu'ils appartiennent à la même propriété lors de la réémarrage.
Je me rends compte que cela fait quelques années de retard, mais j'ai pu réaliser la structure que vous avez désirée simplement en utilisant xmleementattribute .
J'ai découvert cela en utilisant xsd.exe pour générer des définitions de schéma à partir de XML et générer un code .NET à partir de fichiers XSD. Autant que je sache, cela fonctionne dans .NET 3.5 à 4.6. P>
Voici la définition de la classe que j'ai utilisée: p> et voici un linqpad extrait qui illustre la sérialisation / la désérialisation (basé sur l'extrait de code de David Colwell, merci Btw pour la pointe de l'exclusion Bom, c'était juste ce que je cherchais): p> Ce XML produit peut être sérialisé et désérialisé sans implémenter ixmlSerializable, tels que: P> <books>
<bookNum>2</bookNum>
<book>
<name>book 1</name>
<record>
<borrowDate>2/2/2016 5:57:25 PM</borrowDate>
<returnDate>2/2/2016 5:57:25 PM</returnDate>
</record>
</book>
<book>
<name>book 2</name>
<record>
<borrowDate>2/2/2016 5:57:25 PM</borrowDate>
<returnDate>2/2/2016 5:57:25 PM</returnDate>
</record>
<record>
<borrowDate>2/2/2016 5:57:25 PM</borrowDate>
<returnDate>2/2/2016 5:57:25 PM</returnDate>
</record>
</book>
</books>
Votez pour l'idée d'utiliser XSD.exe pour créer une classe à partir du XML souhaité! Va ajouter cela à mon sac à outils.
Si vous avez besoin d'autres classes, telles que Book2 à l'intérieur de la classe de livres, vous avez des instructions spéciales pour la mettre en œuvre.
Exemple Lorsque j'essaie d'exécuter le programme, j'ai l'erreur suivante: p> "Informations supplémentaires: Erreur lors de la réflexion du type" p> p>
Veuillez modifier la réponse pour élaborer sur le sujet des instructions spéciales.
Publiez la sortie du xmlSerializer?
"Le résultat n'est pas le même que ci-dessous XML" - comment c'est "pas le même"? Qu'est-ce que vous obtenez à la place? (Note latérale: Vous utilisez un format inhabituel pour les dates de XML - ISO8601 AAAA-MM-DD)
Si vous faites une sérialisation XML, vous ne pouvez pas obtenir votre XML personnalisé
En fait Mac, vous pouvez. Vous devez attribuer les propriétés à modifier leurs noms d'éléments, mais vous pouvez.
Vous pouvez obtenir une telle sortie à l'aide de la mise en œuvre de ixmlSerializable a > Attribut - Voir 3ème résumé dans ma réponse.