2012-02-22 30 views
4

對象可以被序列化到如預期XML,只要通用領域Object的實際類型的含量在XmlElement屬性列表:如何將一個泛型類序列化爲XML?下面的類的

public class SerializedObject<T> : Serializable where T : Serializable 
{ 
    [System.Xml.Serialization.XmlElement(Type = typeof(Weapon))] 
    [System.Xml.Serialization.XmlElement(Type = typeof(Armor))] 
    [System.Xml.Serialization.XmlElement(Type = typeof(QuestItem))] 
    public T Object; 

    public string ObjectId; 
    public int ID; 

    public SerializedObject() { } 

    public SerializedObject(T _object) 
    { 
     Object = _object; 
     ID = Object.Id; 
     ObjectId = Object.ObjectId; 
    } 
} 

的問題是:

如何序列化此類的對象,包括通用字段Object而不指定TXmlElement屬性的所有可能類型?

+0

僅供參考,C#沒有模板。它有非常不同的泛型。 – 2012-02-22 15:29:08

+0

感謝您的澄清(我是編程新手)。 – Gabriel 2012-02-22 15:49:58

回答

2

我也遇到過。我所做的是創建一個包裝類:

public static XmlDocument SerializeToXmlDocument<XmlEntity>(XmlEntity o) 
{ 
    XmlDocument xdoc; 
    SerializeWrapper<XmlEntity> wrapper = new SerializeWrapper<XmlEntity>(); 
    wrapper.XmlObject = o; 

    XmlSerializer xs = new XmlSerializer(wrapper.GetType()); 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     xs.Serialize(ms, wrapper); 
     xdoc = new XmlDocument(); 
     ms.Position = 0; 
     xdoc.Load(ms); 
    } 

    return xdoc; 
} 

這裏是用來包裹對象現在

[XmlRoot("Root")] 
public class SerializeWrapper<TObject> 
{ 
    [XmlAttribute()] 
    public string Name { get; set; } 

    public TObject XmlObject { get; set; } 
} 

類,你可以稱其爲:

Weapon weapon = new Weapon() 
var xdoc = SerializeToXmlDocument<Weapon>(weapon); 
相關問題