我有一个节点,可以包含text或xml,text + xml或text + xml + text。前两个案例我用
解决了 [XmlAnyElement]
[EditorBrowsable(EditorBrowsableState.Never)]
public XmlElement[] TextNodes { get; set; }
[XmlText]
public string InnerText { get; set; }
[XmlIgnore]
public string Text
{
get
{
return String.Format("{0}{1}", InnerText, TextNodes.Aggregate(String.Empty, (current, documentNode) => current + documentNode.OuterXml));
}
}
但是,在xml之后有文本的最后一种情况我无法找到解决方案。
XML
<node>
somtext <p>moretext</p> even more text
</node>
我的代码将在Text中输出:
sometext <p>moretext</p>
我需要:
sometext <p>moretext</p> even more text
答案 0 :(得分:5)
您想要的是混合内容,并在XmlSerializer中受支持。
像这样写你的课
[Serializable]
public class TestClass
{
[XmlText(typeof(string))]
[XmlAnyElement]
public object[] Items { get; set; }
}
并将所有元素放在同一个对象数组中
答案 1 :(得分:0)
你必须使用CDATA - 因为标签&lt;&gt;将打破XML-Structure使用CDATA或编码你的字符串(可能是b64)
看看这里:
how-do-you-serialize-a-string-as-cdata-using-xmlserializer
修改强>
我认为你的代码看起来应该是这样的:
[XmlIgnore]
public string OtherXML;
[XmlText]
[XmlElement(ElementName = "OtherXML")]
XmlCDataSection OtherXMLAsCdata
{
get
{
var dummy = new XmlDocument();
return dummy.CreateCDataSection(OtherXML);
}
set
{
if (value == null)
{
OtherXML = null;
return;
}
OtherXML = value.Value;
}
}