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);
}
}
也许这是一个主意克隆我的列表,并删除所有的元素,我不希望在序列化之前保存?
您可以使用基派生关系来构建您的集合类型,其中一个忽略序列化,另一个覆盖您忽略的内容。
[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;
}
}
}