我在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;
可能是什么问题?
答案 0 :(得分:2)
您正在使用XmlSerializer
序列化包含文字<![CDATA[...]]>
的字符串。
XmlSerializer
将生成XML,可以对其进行反序列化以生成完全相同的字符串。
如果它产生:
<SomeNode><![CDATA[...]]></SomeNode>
然后反序列化的值将是:
...
与原始字符串不匹配。
相反,它会产生:
<SomeNode><![CDATA[...]]></SomeNode>
将正确反序列化。
当您使用XmlSerializer
时,您不必担心编码您的值;序列化器将为您处理。删除使用CreateCDataSection
的代码,让序列化程序正确处理数据编码。
如果您需要对生成的XML进行精确控制,请不要使用XmlSerializer
。请改用XmlWriter
,XmlDocument
或XDocument
。