[英]How to serialize a generic class to XML?
只要XmlElement
屬性列表中包含通用字段Object
的實際類型,就可以按預期將以下類的對象序列化為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;
}
}
問題是:
如何在不指定XmlElement
屬性中T
所有可能類型的情況下序列化此類的對象(包括通用字段Object
?
我也遇到了這個。 我所做的是創建一個包裝器類:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.