Une solution intelligente au manque d'attributs CDATA dans .NET XmlSerializer
Le XmlSerializer du framework .NET fournit une fonction puissante pour sérialiser des objets dans des documents XML. Cependant, il lui manque un attribut direct pour spécifier la sérialisation de la chaîne vers CDATA.
Une solution créative
Pour contourner cette limitation, nous pouvons utiliser une solution de contournement intelligente. En implémentant une propriété personnalisée qui encapsule le comportement CDATA souhaité, nous pouvons obtenir l'effet souhaité.
<code class="language-csharp">[Serializable] public class MyClass { public MyClass() { } [XmlIgnore] public string MyString { get; set; } [XmlElement("MyString")] public System.Xml.XmlCDataSection MyStringCDATA { get { return new System.Xml.XmlDocument().CreateCDataSection(MyString); } set { MyString = value.Value; } } }</code>
Dans cet attribut personnalisé :
MyString
: Représente la chaîne réelle à sérialiser. MyStringCDATA
: Implémente les méthodes getter et setter pour convertir une chaîne en CDATA et vice versa. Utilisation :
Pour utiliser cette solution il suffit de :
<code class="language-csharp">MyClass mc = new MyClass(); mc.MyString = "<test>Hello World</test>"; XmlSerializer serializer = new XmlSerializer(typeof(MyClass)); StringWriter writer = new StringWriter(); serializer.Serialize(writer, mc); Console.WriteLine(writer.ToString());</code>
Ce code générera la sortie XML attendue, où la chaîne est contenue dans CDATA :
<code class="language-xml"><?xml version="1.0" encoding="utf-16"?><myclass xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><mystring><![CDATA[<test>Hello World</test>]]></mystring></myclass></code>
(Remarque : l'exemple XML de sortie peut différer légèrement de l'original, en fonction de la version .NET et des paramètres de sérialisation. L'essentiel est que l'attribut MyStringCDATA
encapsule avec succès la chaîne dans une section CDATA.)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!