【问题标题】:XML serialization and "<" , ">" when generating an HTML document生成 HTML 文档时的 XML 序列化和“<”、“>”
【发布时间】:2012-06-06 14:30:56
【问题描述】:

我正在尝试使用XmlSerializer 和一组这样的类来动态生成 HTML 表格:

[XmlInclude(typeof(Th))]
public class Td
{
    [XmlElement("span")]
    public string Designation { get; set; }

    [XmlAttribute("colspan")]
    public int ColSpan { get; set; }

    [XmlAttribute("rowspan")]
    public int RowSpan { get; set; }

    public Td(string designation, int colspan)
    {
        Designation = designation;
        ColSpan = colspan;
        RowSpan = 1;
    }

    public Td()
    {            
    }

}

这里的问题是Designation 属性可以有一个标签作为像&amp;lt;option...&amp;gt; 这样的值,所以当我序列化我的模型时,我得到&amp;lt;option...&amp;gt; 而不是&amp;lt;option...&amp;gt;

我可以像这样使用string.Replace 方法来解决这个问题:Replace("&amp;lt;", "&lt;").Replace("&amp;gt;", "&gt;");

有没有不使用string.Replace 的干净方法来获得预期结果?

【问题讨论】:

  • XML != HTML。大多数 XHTML 工作已经停止,afaik。

标签: c# html serialization xmlserializer xml-encoding


【解决方案1】:

您可以创建另一个将Designation 公开为XmlNode 的属性:

[XmlIgnore]
public string Designation { get; set; }

[XmlElement("span")]
public XmlNode DesignationAsXml
{
    get
    {
        XmlDocument doc = new XmlDocument();
        doc.InnerXml = "<root>" + this.Designation + "</root>";
        return doc.DocumentElement.FirstChild;
    }
    set
    {
        throw new NotSupportedException();
    }
}

【讨论】:

  • 反序列化在这里如何工作?序列化的对象不会在此处使用相同的信息反序列化。
  • @Nenotlep:OP 的场景不需要反序列化,所以我没有费心实现属性设置器。为此,只需将value.OuterXml 分配给this.Designation,而不是抛出异常。
【解决方案2】:

无需手动更换。 我认为最好的方法是使用System.XML.XmlWriter.WriteString 类。查找类定义here

【讨论】:

    猜你喜欢
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    相关资源
    最近更新 更多