XmlSerializer – 包含text + xml + text的节点

我有一个节点,可以包含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

  somtext 

moretext

even more text

我的代码将在Text中输出:

 sometext 

moretext

我需要:

 sometext 

moretext

even more text

您想要的是混合内容,并在XmlSerializer中受支持。

像这样写你的课

 [Serializable] public class TestClass { [XmlText(typeof(string))] [XmlAnyElement] public object[] Items { get; set; } } 

并将所有元素放在同一个对象数组中

你必须使用CDATA – 因为标签<>将破坏XML-Structure使用CDATA或编码你的字符串(可能是b64)

看看这里:

怎么办,你序列化-A-字符串作为-CDATA-使用-的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; } }