2012-06-06 31 views
3

我試圖通過使用動態XmlSerializer生成一個HTML表,這樣一組類時:XML序列化和「<" , ">」生成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財產可以有一個標籤像<option...>值,所以當我序列化我的模型,我得到&lt;option...&gt;代替<option...>

我可以通過使用string.Replace方法這樣解決問題:Replace("&lt;", "<").Replace("&gt;", ">");

沒有使用string.Replace來獲得預期結果嗎?

+2

XML = HTML。大多數XHTML工作已經停止,afaik。 –

回答

2

您可以創建一個公開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(); 
    } 
} 
+0

反序列化如何在這裏工作?序列化的對象在這裏不會使用相同的信息進行反序列化。 – Nenotlep

+1

@Nenotlep:OP的場景不需要反序列化,所以我沒有打擾實現屬性設置器。爲此,只需將'value.OuterXml'分配給'this.Designation'而不是拋出異常。 –

0

手動更換是不必要的。 我認爲最好的方法是使用System.XML.XmlWriter.WriteString類。尋找類定義here