微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

只要通用字段Object的实际类型包含在XmlElement属性列表中,就可以按照预期将以下类的对象序列化为 XML

@H_404_6@

@H_404_6@

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;
    }
}

问题是:@H_404_6@

如何序列化此类的对象,包括通用字段Object,而不指定XmlElement属性中T的所有可能类型?@H_404_6@

解决方法

我也碰到了这个.我做的是创建一个包装类:

@H_404_6@

@H_404_6@

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;
}

这是用于包装对象的类@H_404_6@

@H_404_6@

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

    public TObject XmlObject { get; set; }
}

现在,您可以将其称为:@H_404_6@

@H_404_6@

Weapon weapon = new Weapon()
var xdoc = SerializetoXmlDocument<Weapon>(weapon);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐