加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 17:23:57 所属栏目:百科 来源:网络整理
导读:只要通用字段Object的实际类型包含在XmlElement属性列表中,就可以按照预期将以下类的对象序列化为 XML: public class SerializedObjectT : Serializable where T : Serializable{ [System.Xml.Serialization.XmlElement(Type = typeof(Weapon))] [System.Xm
只要通用字段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,而不指定XmlElement属性中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;
}

这是用于包装对象的类

[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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读