C# 如何将泛型类序列化为XML?

C# 如何将泛型类序列化为XML?,c#,generics,xml-serialization,C#,Generics,Xml Serialization,只要xmlement属性列表中包含泛型字段Object的实际类型,就可以按预期将以下类的对象序列化为XML: public class SerializedObject<T> : Serializable where T : Serializable { [System.Xml.Serialization.XmlElement(Type = typeof(Weapon))] [System.Xml.Serialization.XmlElement(Type = typ

只要
xmlement
属性列表中包含泛型字段
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;
    }
}
public类SerializedObject:Serializable其中T:Serializable
{
[System.Xml.Serialization.xmlement(Type=typeof(武器))]
[System.Xml.Serialization.xmlement(Type=typeof(Armor))]
[System.Xml.Serialization.xmlement(Type=typeof(QuestItem))]
公众反对;
公共字符串ObjectId;
公共int ID;
公共序列化对象(){}
公共序列化对象(T_对象)
{
对象=_对象;
ID=Object.ID;
ObjectId=Object.ObjectId;
}
}
问题是:


如何序列化此类的对象,包括泛型字段
object
,而不在
xmlement
属性中指定
T
的所有可能类型?

我也遇到了这个问题。我所做的是创建一个包装器类:

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;
}
publicstaticxmldocument序列化为XmlDocument(xmlo实体)
{
xml文档xdoc;
SerializeWrapper=新的SerializeWrapper();
wrapper.XmlObject=o;
XmlSerializer xs=新的XmlSerializer(wrapper.GetType());
使用(MemoryStream ms=new MemoryStream())
{
序列化(ms,包装器);
xdoc=新的XmlDocument();
ms.Position=0;
xdoc.负荷(ms);
}
返回xdoc;
}
下面是用于包装对象的类

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

    public TObject XmlObject { get; set; }
}
[XmlRoot(“根”)]
公共类序列化包装器
{
[XmlAttribute()]
公共字符串名称{get;set;}
公共对象XmlObject{get;set;}
}
现在,您可以将其称为:

Weapon weapon = new Weapon()
var xdoc = SerializeToXmlDocument<Weapon>(weapon);
武器=新武器()
var xdoc=文件(武器);
FYI,C#没有模板。它有非常不同的泛型。感谢您的澄清(我是编程新手)。