XMLSerializer:忽略List中的元素

时间:2015-07-14 09:21:11

标签: c# serialization xmlserializer

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

这是我的(De)Serializer的代码:

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

也许这是克隆我的列表的想法,并删除序列化之前我不想保存的所有元素?

1 个答案:

答案 0 :(得分:0)

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

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