【问题标题】:How to prevent XmlSerializer from escaping < and > characters如何防止 XmlSerializer 转义 < 和 > 字符
【发布时间】:2014-09-21 17:27:02
【问题描述】:

我使用 XlmSerializer 序列化 dotnet 对象。

dotnet 对象的一个​​属性是具有此值的字符串:

"&lt;![CDATA[&lt;p&gt;No Comments&lt;/p&gt;]]&gt;"

一旦序列化为 StringWriter,所有 &amp;lt;&amp;gt; 字符都将转换为 &amp;lt;&amp;gt;,包括 CDATA。

我怎样才能阻止这种情况发生?

【问题讨论】:

  • 你是说你想要那个,当它再次反序列化时,属性只是&lt;p&gt;No Comments&lt;/p&gt;
  • 是的,这并不重要,因为它会被只对实际值感兴趣的第三方服务反序列化。 CDATA 只是为了确保 xml 有效。

标签: c# .net xmlserializer cdata


【解决方案1】:

不要将 CDATA 放入 - 这是序列化程序的工作。您刚刚告诉序列化程序从 CDATA 字符串中生成一个有效的 XML。正是这样做的——反序列化​​之后,你仍然留下&lt;![CDATA[&lt;p&gt;No Comments&lt;/p&gt;]]&gt;。这正是你所要求的!更重要的是,这正是您希望序列化程序对数据执行的操作 - 否则您将面临一个受伤的世界,因为您需要确保数据实际上是安全的。本质上,您正在执行双重编码。

相反,只需将 &lt;p&gt;No Comments&lt;/p&gt; 放在那里 - 序列化程序将为您处理转义,以确保它是实际反序列化为 &lt;p&gt;No Comments&lt;/p&gt; 的有效 XML。

【讨论】:

  • 是的,我认为这可行。问题是负责反序列化xml的第三方服务是用Java编写的,我不知道它是否会以同样的方式工作,我会检查一下。
  • @Sam Java 应该没问题 - 你应该担心的是 C 中的所有那些“自定义实现”,以及那些不知道 XML 比“包装一个围绕它的几个尖括号并完成它”。您想问自己的问题是解码后的数据是否仍应包含CDATA
  • 好的,我刚刚与负责 Java 服务的人员进行了交谈。他们“手动”反序列化,哈哈。无论如何,我将按原样发送 XML。
  • @Sam 哦,男孩。祝你好运。由于这样的场景,我实际上不得不制作自己的 XML(和 HTTP)序列化程序。这不是一条幸福的道路......
猜你喜欢
  • 1970-01-01
  • 2011-03-18
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多