我在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();
}
}其中一个元素包含<![CDATA[。问题是在浏览器中我得到了<![CDATA[,但是在文档源代码中它被显示为<![CDATA
若要设置cdata值,请使用新的System.Xml.XmlDocument().CreateCDataSection(tempValue).OuterXml;
有什么问题吗?
发布于 2015-07-02 19:10:14
您正在使用XmlSerializer序列化包含文本<![CDATA[...]]>的字符串。
XmlSerializer将生成XML,该XML可以反序列化以生成完全相同的字符串。
如果它产生了:
<SomeNode><![CDATA[...]]></SomeNode>那么反序列化的值将是:
...与原来的字符串不匹配。
相反,它将产生:
<SomeNode><![CDATA[...]]></SomeNode>它将正确地反序列化。
当您使用XmlSerializer时,您不需要担心编码您的值;序列化程序将为您处理这个问题。删除使用CreateCDataSection的代码,并让序列化程序正确地编码数据。
如果需要对生成的XML进行精确控制,则不要使用XmlSerializer。改用XmlWriter、XmlDocument或XDocument。
https://stackoverflow.com/questions/31189953
复制相似问题