Ada*_*kin 7 c# xml xml-serialization cdata
我在使用c#序列化cdata部分时遇到问题
我需要将XmlCDataSection对象属性序列化为元素的innertext.
我要找的结果是这样的:
<Test value2="Another Test">
<![CDATA[<p>hello world</p>]]>
</Test>
Run Code Online (Sandbox Code Playgroud)
为了产生这个,我使用这个对象:
public class Test
{
[System.Xml.Serialization.XmlText()]
public XmlCDataSection value { get; set; }
[System.Xml.Serialization.XmlAttributeAttribute()]
public string value2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在value属性上使用xmltext注释时,将引发以下错误.
System.InvalidOperationException:反映属性'value'时出错.---> System.InvalidOperationException:无法序列化System.Xml.XmlCDataSection类型的成员'value'.XmlAttribute/XmlText不能用于编码复杂类型
如果我注释掉注释,序列化将起作用,但cdata部分被放入一个值元素,这对我想要做的事情没有好处:
<Test value2="Another Test">
<value><![CDATA[<p>hello world</p>]]></value>
</Test>
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出我正确的方向让这个工作.
谢谢,亚当
谢谢理查德,现在才有机会回到这一点.我想我已经通过你的建议解决了这个问题.我使用以下方法创建了一个CDataField对象:
public class CDataField : IXmlSerializable
{
private string elementName;
private string elementValue;
public CDataField(string elementName, string elementValue)
{
this.elementName = elementName;
this.elementValue = elementValue;
}
public XmlSchema GetSchema()
{
return null;
}
public void WriteXml(XmlWriter w)
{
w.WriteStartElement(this.elementName);
w.WriteCData(this.elementValue);
w.WriteEndElement();
}
public void ReadXml(XmlReader r)
{
throw new NotImplementedException("This method has not been implemented");
}
}
Run Code Online (Sandbox Code Playgroud)