我有一个Config对象,我将其序列化为XML,以便稍后再加载它。在我的配置对象中,我有一个字典对象
public Dictionary<int, FooConfiguration> Foos
{
get { return foos; }
set
{
if (foos != value)
{
foos = value;
OnPropertyChanged(() => foos);
}
}
}
当我序列化它似乎不喜欢序列化我能理解的词典时,它们是复杂的对象。因此,作为一种解决方法,我想我会用[XMLIgnore]
修饰属性,并创建一个我的对象列表,它将从字典中获取值。
public List<FooConfiguration> FooConfigurations
{
get { return Foos.Values.ToList(); }
set
{
int fooNumber = 0;
foreach (var fooConfiguration in value)
{
foos.Add(fooNumber++, fooConfiguration);
}
}
}
这就像序列化一样有用。我现在可以在XML中看到这些对象。问题是,它从来没有击中二传手。 为什么列表能够序列化而不是反序列化?
我最终通过使用FooConfiguration[]
而不是列表来修复此问题,但如果你问我,这似乎有点奇怪。
正如你所看到的,我有一个解决方案,我真的很想了解为什么它做得更好。
答案 0 :(得分:2)
如果您的列表具有非空值,则它不会需要来触及setter;它只是在列表中调用Add
。在您的情况下,您处理它的列表与实际数据分离(因为您在getter中创建了它)。
基本上,它将数据反序列化为留在地板上的对象。