XML serialization and "<" , ">" when generating an HTML document

4.5k views Asked by At

I'm trying to dynamically generate an HTML table by using XmlSerializer and a set of classes like this:

[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()
    {            
    }

}

The problem here is that the Designation property can have a tag as value like <option...>, so when I serialize my model I get &lt;option...&gt; instead of <option...>

I can solve the problem by using the string.Replace method like this: Replace("&lt;", "<").Replace("&gt;", ">");

Is there a clean way to get the expected result without the use of string.Replace?

2

There are 2 answers

2
Michael Liu On BEST ANSWER

You can create another property that exposes Designation as an 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();
    }
}
0
Johnny_D On

Replacing it manually is needless. I think the best way is using System.XML.XmlWriter.WriteString class. Look for class definition here