Est-il possible via un attribut quelconque de sérialiser une chaîne en tant que CDATA à l'aide du .Net XmlSerializer?
c#
.net
xml-serialization
Jamesaharvey
la source
la source
CDataContent
si vous ne lisez que du XML.XmlSerializer.Deserialize
le transformera automatiquement en texte pour vous.Réponses:
la source
Usage:
Production:
la source
XmlDocument().CreateCDataSection(MyString ?? String.Empty);
En plus de la manière publiée par John Saunders, vous pouvez utiliser directement une XmlCDataSection comme type, bien que cela se résume à presque la même chose:
la source
Dans la classe à sérialiser:
Et la classe CData:
la source
Dans mon cas, j'utilise des champs mixtes, certains CDATA d'autres non, du moins pour moi la solution suivante fonctionne ...
En lisant toujours le champ Valeur, j'obtiens le contenu, que ce soit CDATA ou simplement du texte brut.
Mieux vaut tard que jamais.
À votre santé
la source
J'avais un besoin similaire mais j'avais besoin d'un format de sortie différent - je voulais un attribut sur le nœud qui contient le CDATA. Je me suis inspiré des solutions ci-dessus pour créer la mienne. Peut-être que cela aidera quelqu'un à l'avenir ...
Dans l'objet parent à sérialiser, j'ai la propriété suivante:
J'obtiens la sortie suivante:
la source
Cette implémentation a la capacité de traiter CDATA imbriqué dans la chaîne que vous encodez (en fonction de la réponse originale de John Saunders).
Par exemple, supposons que vous vouliez encoder la chaîne littérale suivante dans CDATA:
Vous voudriez que la sortie résultante ressemble à quelque chose comme ceci:
L'implémentation suivante bouclera sur la chaîne, divisera les instances de
...]]>...
en...]]
et>...
et créera des sections CDATA séparées pour chacune.la source