如何使用XmlSerializer在XmlNode或XmlElement中允许免费的未编码的html

时间:2015-04-10 11:01:42

标签: c# html xml xml-serialization 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>

对于这堂课:

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

实现此类行为的最简单方法是什么(问题的一部分是我的元素可能以裸文开始和/或结束)?

1 个答案:

答案 0 :(得分:1)

我找到的简单解决方法是创建一个XmlElement帮助器属性,该属性将使用<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,则序列化将失败。