首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CDATA返回&lt;![CDATA而不是<!][CDATA[

CDATA返回&lt;![CDATA而不是<!][CDATA[
EN

Stack Overflow用户
提问于 2015-07-02 16:29:12
回答 1查看 1.7K关注 0票数 1

我在asp.net MVC控制器中有一个操作,它返回一个序列化的对象,如下所示。

代码语言:javascript
复制
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(); 
            }
        }

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

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

有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-02 19:10:14

您正在使用XmlSerializer序列化包含文本<![CDATA[...]]>的字符串。

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

如果它产生了:

代码语言:javascript
复制
<SomeNode><![CDATA[...]]></SomeNode>

那么反序列化的值将是:

代码语言:javascript
复制
...

与原来的字符串不匹配。

相反,它将产生:

代码语言:javascript
复制
<SomeNode>&lt;![CDATA[...]]&gt;</SomeNode>

它将正确地反序列化。

当您使用XmlSerializer时,您不需要担心编码您的值;序列化程序将为您处理这个问题。删除使用CreateCDataSection的代码,并让序列化程序正确地编码数据。

如果需要对生成的XML进行精确控制,则不要使用XmlSerializer。改用XmlWriterXmlDocumentXDocument

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31189953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档