Gab*_*iel 5 c# generics xml-serialization
只要属性Object列表中包含通用字段的实际类型,就可以按预期将以下类的对象序列化为XML XmlElement:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是:
如何在Object不为Tin XmlElement属性指定所有可能类型的情况下序列化此类的对象(包括通用字段)?
我也遇到了这个。我所做的是创建一个包装类:
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;
}
Run Code Online (Sandbox Code Playgroud)
这是用于包装对象的类
[XmlRoot("Root")]
public class SerializeWrapper<TObject>
{
[XmlAttribute()]
public string Name { get; set; }
public TObject XmlObject { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以将其称为:
Weapon weapon = new Weapon()
var xdoc = SerializeToXmlDocument<Weapon>(weapon);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5379 次 |
| 最近记录: |