如何使用 XmlSerializer 在 XmlNode 或 XmlElement 中允许自由未编码 html

How to allow free unencoded html in XmlNode or XmlElement using XmlSerializer

我正在寻找一种创建 xml 元素的方法,该元素将接受可能包含 html 元素(或任何其他有效的 xml 元素)的文本字符串可能看起来像这样:

"Test text with <strong>custom nodes</strong> that shouldn't be encoded"

我试过将 XmlAnyElementXmlNode[] 结合使用,但没有成功。

我想要的输出应该是这样的:

<Root>
    <Text>
        Test text with <strong>custom nodes</strong> that shouldn't be encoded
    </Text>
</Root>

为此class:

public class Root
{
    // Problematic property
    public string Text { get; set; }
}

实现这种行为的最简单方法是什么(部分问题是我的元素可能以纯文本开头 and/or 结尾)?

我发现的简单解决方法是创建一个 XmlElement 助手 属性,它将 return 用 <Text>..</Text> 包裹的字符串作为 XmlElement 使用 XmlDocument 并像这样忽略 Text 属性:

public class Root
{
    [XmlIgnore]
    public string Text { get; set; }

    [XmlAnyElement]
    public XmlElement TextElement
    {
        get
        {
            var x = new XmlDocument();
            x.LoadXml(string.Format("<Text>{0}</Text>", Text));
            return x.DocumentElement;
        }
        set { Text = value.InnerXml; }
    }
}

这将接受 Text 下的 任何内容 但请注意,如果 Text 属性 将设置为无效 xml , 序列化将失败。