Objet C # en XML

Je crée une application qui nécessite de convertir un object c # en XML.

J’utilise la classe XML Serializer pour y parvenir. Voici l’extrait de code:

public class Anwer { public int ID { get; set; } public ssortingng XML { get; set; } public Anwer(int ID, ssortingng XML) { this.ID = ID; this.XML = XML; } public Anwer() { } } 

Voici la fonction principale:

  ssortingng AnswerXML = @"1"; List answerList = new List(); answerList.Add(new Anwer(1,AnswerXML)); AnswerXML = @"2"; answerList.Add(new Anwer(2, AnswerXML)); XmlSerializer x = new XmlSerializer(answerList.GetType()); x.Serialize(Console.Out, answerList); 

La sortie est:

    1 <Answer>1<Answer>   2 <Answer>2<Answer>   

Dans le code ci-dessus, ” sont remplacés par ‘<' et '& gt'; Comment éviter cela? Je sais que le remplacement de la chaîne en est une, mais je ne veux pas l'utiliser.

Merci d’avance.

Vous n’avez pas, fondamentalement. C’est bien la sérialisation de l’object – le sérialiseur XML ne veut pas avoir à traiter le XML dans les chaînes, ce qui échappe au code XML.

Si vous désérialisez le XML ultérieurement, vous retrouverez les données d’object d’origine.

Si vous essayez de créer un document XML de manière personnalisée, je vous suggère de ne pas utiliser la sérialisation XML pour commencer. Utilisez LINQ to XML si vous souhaitez créer des éléments, etc. explicitement, ou si vous voulez vraiment, vraiment, inclure des chaînes arbitraires directement dans votre sortie, utilisez XmlWriter .

Si vous pouviez nous donner plus d’informations sur ce que vous essayez de faire, nous pourrons peut-être suggérer de meilleures alternatives – la construction directe de chaînes XML n’est presque jamais une bonne idée.

XmlSerializer ne vous croira pas qu’un élément est xml à moins que vous ne le convainquiez, par exemple en exposant cette propriété en tant que XmlDocument . Sinon, il (correctement, IMO) code toujours de telles valeurs. Par exemple:

 using System; using System.Xml; using System.Xml.Serialization; public class Anwer { public int ID { get; set; } public XmlDocument XML { get; set; } public Anwer(int ID, ssortingng XML) { this.ID = ID; XmlDocument doc = new XmlDocument(); doc.LoadXml(XML); this.XML = doc; } public Anwer() { } } static class Program { static void Main() { var answer = new Anwer(123, "2"); var ser = new XmlSerializer(answer.GetType()); ser.Serialize(Console.Out, answer); } } 

Je crée une application qui nécessite de convertir un object c # en XML. J’utilise la classe XML Serializer pour y parvenir

Si vous utilisez le sérialiseur XML pour effectuer le travail, pourquoi le champ “XML” dans lequel vous insérez du code XML codé à la main? On dirait que vous voulez quelque chose de plus semblable à ceci (en utilisant le nom de votre classe, même s’il ressemble à une faute d’orthographe):

 public class Anwer { public int ID { get; set; } public int Answer { get; set; } } .. List answerList = new List() { new Anwer { ID=1, Answer=2 }, new Anwer { ID=2, Answer=3 }, }; XmlSerializer x = new XmlSerializer(answerList.GetType()); x.Serialize(Console.Out, answerList); ..   1 2  ... 

Ou si vous souhaitez / avez besoin que l’élément Réponse soit nested dans un élément XML pour une raison quelconque, vous pouvez modifier votre object Anwer afin de refléter cette structure (comme le suggère Oleg Kalenchuk), ou générer le code XML vous-même plutôt que d’utiliser le sérialiseur:

 XElement xml = new XElement("AnwerList", from anwer in anwerList select new XElement("Anwer", new XElement("ID", anwer.ID), new XElement("XML", new XElement("Answer", anwer.Answer) ) ) ); Console.Out.WriteLine(xml);   1  2   ... 

Je préfère quand même ce dernier, car cela vous donne plus de contrôle.

Vous affectez une chaîne contenant les signes à l’élément XML, il est donc évident que le sérialiseur remplacera les par des références d’entité. Même si vous obtenez> dans le texte lorsque vous désérialisez le XML, vous obtenez le> dans votre texte.

  1. Créer une nouvelle classe AnswerXML avec un membre “Answer” entier
  2. Changer le type de membre XML en AnswerXML au lieu de chaîne

Parce que ‘<' et '>‘ sont des caractères utilisés pour la structure XML elle-même, ils sont automatiquement codés en html. Lorsque vous le relisez dans votre application et que vous le désérialisez, le '<' et '> ‘devrait être reconverti en’ <'et'> ‘.

Si votre objective est différent, utilisez la fonctionnalité htmldecode.

Si cela ne vous aide pas, dites simplement ce que vous voulez faire exactement avec les données xml.