CDATA returns <![CDATA 而不是 <![CDATA[
CDATA returns <![CDATA instead of <![CDATA[
我在 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;
可能是什么问题?
您正在使用 XmlSerializer
序列化包含文本 <![CDATA[...]]>
.
的字符串
XmlSerializer
将生成 XML,可以将其反序列化以生成完全相同的字符串。
如果它产生了:
<SomeNode><![CDATA[...]]></SomeNode>
那么反序列化的值将是:
...
与原始字符串不匹配。
相反,它将产生:
<SomeNode><![CDATA[...]]></SomeNode>
这将正确反序列化。
当您使用 XmlSerializer
时,您无需担心对您的值进行编码;序列化程序将为您处理。删除使用 CreateCDataSection
的代码,让序列化程序负责正确编码您的数据。
如果需要精确控制生成的XML,那么就不要使用XmlSerializer
。请改用 XmlWriter
、XmlDocument
或 XDocument
。
我在 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;
可能是什么问题?
您正在使用 XmlSerializer
序列化包含文本 <![CDATA[...]]>
.
XmlSerializer
将生成 XML,可以将其反序列化以生成完全相同的字符串。
如果它产生了:
<SomeNode><![CDATA[...]]></SomeNode>
那么反序列化的值将是:
...
与原始字符串不匹配。
相反,它将产生:
<SomeNode><![CDATA[...]]></SomeNode>
这将正确反序列化。
当您使用 XmlSerializer
时,您无需担心对您的值进行编码;序列化程序将为您处理。删除使用 CreateCDataSection
的代码,让序列化程序负责正确编码您的数据。
如果需要精确控制生成的XML,那么就不要使用XmlSerializer
。请改用 XmlWriter
、XmlDocument
或 XDocument
。