2012-10-08 23 views
1

我對xml序列化有一個奇怪的要求。IXmlSerializable和XmlRootAttribute

請參閱下面的C#代碼(由於變量'rootName'超出了範圍而無法編譯)。我的意圖是讓我的類GeneralData成爲'一般'。這意味着可以根據類構造函數的輸入參數將此類序列化爲具有不同根元素的不同XML字符串。

[XmlRoot(ElementName = rootName)] 
public class GeneralData : Dictionary<String, Object>, IXmlSerializable 
{ 
    public string rootName; 
    public GeneralData(string rootName) 
    { 
     this.rootName = rootName; 
    } 

    public System.Xml.Schema.XmlSchema GetSchema() 
    { 
     throw new NotImplementedException(); 
    } 

    public void ReadXml(System.Xml.XmlReader reader) 
    { 
     throw new NotImplementedException(); 
    } 

    public void WriteXml(System.Xml.XmlWriter writer) 
    { 
     foreach (var key in Keys) 
     { 
      var value = base[key]; 
      writer.WriteElementString(key, value.ToString()); 
     } 
    } 
} 

任何人都可以幫助我完成任務嗎?也許以完全不同的方式? 在此先感謝!

回答

3

IXmlSerializable沒有得到控制根元素。所以不,你不能這樣做。你可以做的最接近的做法是使用new XmlSerializer(...),它的重載允許你在運行時(在構造函數中)指定根名,但你應該謹慎:XmlSerializer的非平凡構造函數不使用內置的串行器緩存,意思是:您最終可以根據new XmlSerializer(...)創建一個新程序集,並且程序集永遠不會被卸載。如果您沒有爲串行器實例添加自己的緩存層,這可能會導致內存泄漏問題。

+0

感謝您的建議。我目前只是將它用作解決方法。我將嘗試重構一些代碼以避免下次出現這個問題。 –