3

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?

1
  • 2
    XML != HTML. Most XHTML work has been discontinued, afaik. Commented Jun 6, 2012 at 14:38

2 Answers 2

2

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();
    }
}
Sign up to request clarification or add additional context in comments.

2 Comments

How would Deserialization work here? A serialized object will not deserialize with the same information here.
@Nenotlep: The OP's scenario didn't require deserialization so I didn't bother implementing the property setter. To do so, simply assign value.OuterXml to this.Designation instead of throwing an exception.
0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.