2009-07-01 8 views
0

J'utilise la sérialisation XML dans un service Web (les contrats transmettent des types complexes en tant que params). Récemment, j'ai remarqué que le moteur de sérialisation .Net XML échappait à certains des 5 caractères réservés bien connus qui doivent être échappés lorsqu'ils sont inclus dans un élément (<,>, &, 'et'). Ma première réaction était "bon vieux .Net , toujours à la recherche pour moi ».Sérialisation .Net XML et caractères échappés ou codés

Mais je commencé à expérimenter et remarqué échappe seulement <,> et &, et pour une raison quelconque pas apostrophy et des guillemets doubles. par exemple, si je retourne cette chaîne littérale un champ dans un type complexe de mon service:

Bad:<>&'":Data 

C'est ce qui est transféré sur le fil (comme on le voit de FIDD ler):

Bad:&lt;&gt;&amp;'":Data 

Y a-t-il quelqu'un dans cette situation ou comprenez-vous pourquoi? Le sérialiseur les ignore-t-il ou y a-t-il une raison à cela? Si je comprends bien le "et « ne sont pas par spécification valide dans un élément xml

Répondre

3

Selon le XML spec, pour re contenu gulaire et balisage:

  • & doit toujours être échappé comme &amp; parce qu'il est le caractère d'échappement
  • < doit toujours être échappé que &lt; puisqu'il détermine le début d'un élément. Il doit même être échappé à l'intérieur des attributs en tant que sécurité et simplifier la détection des erreurs d'analyse.
  • > n'a pas besoin d'être échappé comme &gt; mais est souvent pour la symétrie avec <
  • ' doit être échappé comme &apos; que si dans un attribut délimité par '
  • " a besoin d'être échappé comme &quot; que si elle un attribut délimité par "

, les règles changent certains à l'intérieur des instructions de traitement, les commentaires et CDATA sections, mais les détails sont dans le 2.4 Character Data and Markup partie de la spécification.

Votre sérialiseur tente de vous rendre service en conservant un fichier lisible par l'utilisateur.

(Chacun des ci-dessus peut également être évadé en utilisant leurs équivalents numériques.)

+0

Impressionnant, vous êtes sur place. Merci d'avoir corrigé ma pensée. – BrettRobi

0

XMLSpy vous dit que vous êtes mal Ce qui suit est bien formé XML:..

<root> 
    <data>'"</data> 
</root> 

Mis à part » argument par référence à XMLSpy ", un meilleur argument est que le XML Serializer a été sorti dans la nature pendant plus de sept ans.En ce moment, je garantis que quelqu'un a essayé de sérialiser" O'Brien "dans une propriété Name.

Questions connexes