我得到了一个优秀的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);
}
}
也许这是克隆我的列表的想法,并删除序列化之前我不想保存的所有元素?
答案 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;
}
}
}