XMLSerializer:忽略列表中的元素

本文关键字:元素 忽略列表 XMLSerializer | 更新日期: 2023-09-27 18:02:30

我得到了一个工作良好的XMLSerializer,用于包含许多不同元素的复杂3D模型列表。现在我想序列化另一个List,这只保存了它的几个元素。我只是试图用[XMLIgnore]排除其中的一些,但这会导致我的其他列表的反序列化出现问题。

这是我的(De)序列化器的代码:

public void SerializeObject<T>(T serializableObject, string fileName)
{
    if (serializableObject == null) return;
    var serializer = new XmlSerializer(serializableObject.GetType());
    using (var stream = File.Open(fileName, FileMode.Create))
    {
        serializer.Serialize(stream, serializableObject);
    }
}
public T DeserializeObject<T>(string fileName)
{
    if (string.IsNullOrEmpty(fileName)) return default(T);
    var serializer = new XmlSerializer(typeof(T),overrides);
    using (var stream = File.Open(fileName, FileMode.Open))
    {
        return (T)serializer.Deserialize(stream);
    }
}
也许这是一个主意克隆我的列表,并删除所有的元素,我不希望在序列化之前保存?

XMLSerializer:忽略列表中的元素

您可以使用基派生关系来构建您的集合类型,其中一个忽略序列化,另一个覆盖您忽略的内容。

[Serializable]
public abstract class BaseClass
{
    [XmlIgnore]
    public virtual bool BaseMember { get; set; }
}
[Serializable]
public class DerivedClass : BaseClass
{
    public string DerivedMember { get; set; }
}
[Serializable]
public class XmlIgnore : BaseClass
{
    // no XmlIgnore
    public override bool BaseMember
    {
        get
        {
            return base.BaseMember;
        }
        set
        {
            base.BaseMember = value;
        }
    }
}