【问题标题】:CDATA returns &lt;![CDATA instead of <![CDATA[CDATA 返回 <![CDATA 而不是 <![CDATA[
【发布时间】:2015-07-02 16:29:12
【问题描述】:

我在 asp.net MVC 控制器中有一个动作,它返回一个类似这样的序列化对象。

public ActionResult Test(int ID)
{
    var xmlString= Serialize(object);

    return this.Content(xmlString, "text/xml");

}

public string Serialize<T>(T obj))
        {
            XmlSerializer ser = new XmlSerializer(typeof(T));

            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Encoding = new UnicodeEncoding(false, false); // no BOM in a .NET string
            settings.Indent = true;
            settings.OmitXmlDeclaration = true;

            using (StringWriter textWriter = new StringWriter())
            {
                using (XmlWriter xmlWriter = XmlWriter.Create(textWriter, settings))
                {
                    ser.Serialize(xmlWriter, obj);
                }
                return textWriter.ToString(); 
            }
        }

其中一个元素包含 &lt;![CDATA[ 。问题是在浏览器中我得到 &lt;![CDATA[ ,但在文档源代码中它显示为 &amp;lt;![CDATA

要设置 cdata 值,我使用的是新的System.Xml.XmlDocument().CreateCDataSection(tempValue).OuterXml;

可能是什么问题?

【问题讨论】:

  • tempValue 的(近似)值是多少?
  • 你能发布实际的xml吗?
  • 你的 Serialize 方法是什么样的?
  • @RichardDeeming 我更新了我的问题

标签: xml asp.net-mvc cdata


【解决方案1】:

您正在使用XmlSerializer 序列化包含文本&lt;![CDATA[...]]&gt; 的字符串。

XmlSerializer 将生成 XML,该 XML 可以反序列化以生成完全相同的字符串。

如果它产生了:

<SomeNode><![CDATA[...]]></SomeNode>

那么反序列化的值为:

...

与原始字符串不匹配。

相反,它会产生:

<SomeNode>&lt;![CDATA[...]]&gt;</SomeNode>

这将正确反序列化。

当您使用XmlSerializer 时,您无需担心对您的值进行编码;序列化程序会为你处理这些。删除使用CreateCDataSection 的代码,让序列化程序负责正确编码您的数据。

如果您需要精确控制生成的 XML,请不要使用 XmlSerializer。请改用XmlWriterXmlDocumentXDocument

【讨论】:

  • 这看起来是一个可靠的解释。但是stackoverflow.com/questions/1379888/… 上解释说我的技术应该有效吗?我必须进行一项更改,而不是序列化包含 CDATA 的字符串,我必须序列化 System.Xml.XmlCDataSection 元素。
  • @mko:在那个线程中,代码返回了CreateCDataSection 函数的结果,它是一个XmlCDataSection 对象。您的代码正在返回其OuterXml 属性,即string
  • 我使用了该解决方案并继续使用 XmlSerializer 而不是使用 XmlWriter。
猜你喜欢
  • 1970-01-01
  • 2015-03-06
  • 2021-01-31
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
  • 2018-05-09
  • 2013-06-19
  • 2011-10-18
相关资源
最近更新 更多