【问题标题】:How to allow free unencoded html in XmlNode or XmlElement using XmlSerializer如何使用 XmlSerializer 在 XmlNode 或 XmlElement 中允许免费的未编码 html
【发布时间】:2015-06-16 01:47:15
【问题描述】:

我正在寻找一种方法来创建一个 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; }
}

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

【问题讨论】:

    标签: c# html xml xml-serialization xmlserializer


    【解决方案1】:

    我发现的简单解决方法是创建一个XmlElement 辅助属性,该属性将使用XmlDocument 将用&lt;Text&gt;..&lt;/Text&gt; 包裹的字符串作为XmlElement 返回并忽略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 下的anything,但请注意,如果将Text 属性设置为无效的xml,则序列化将失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 2015-12-06
      相关资源
      最近更新 更多