XmlSerializer-包含文本+xml+文本的节点
本文关键字:文本 节点 +xml+ XmlSerializer- 包含 | 更新日期: 2023-09-27 18:24:00
我有一个节点,它可以包含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>
我的代码将以文本形式输出为:
sometext <p>moretext</p>
我需要:
sometext <p>moretext</p> even more text
您想要的内容称为混合内容,在XmlSerializer中受支持。
把你的课写成这样的
[Serializable]
public class TestClass
{
[XmlText(typeof(string))]
[XmlAnyElement]
public object[] Items { get; set; }
}
并将所有元素放在同一对象数组
您必须使用CDATA,因为标签<>将使用CDATA或对字符串进行编码(可能是b64)来破坏XML结构
看看这里:
如何使用串行化串行化字符串
编辑:
我认为你的代码应该在之后看起来像这样
[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;
}
}