I have a node that can contain either text or xml, text + xml or text + xml + text. The first two cases i have solved using
[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));
}
}
However, the last case where there is text after the xml I cant find a solution for.
XML
<node>
somtext <p>moretext</p> even more text
</node>
my code will give output in Text as:
sometext <p>moretext</p>
I need:
sometext <p>moretext</p> even more text
you have to use CDATA - because the tags <> will break the XML-Structure use CDATA or encode your string (maybe b64)
take a look here:
how-do-you-serialize-a-string-as-cdata-using-xmlserializer
EDIT:
I think your code should look something like this after:
What you want is called mixed content and is supported in the XmlSerializer.
write your class like this
and put all the elements in the same object array