列表的XML反序列化

时间:2016-09-19 08:51:31

标签: c# xml serialization

我有一个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[]而不是列表来修复此问题,但如果你问我,这似乎有点奇怪。

正如你所看到的,我有一个解决方案,我真的很想了解为什么它做得更好。

1 个答案:

答案 0 :(得分:2)

如果您的列表具有非空值,则它不会需要来触及setter;它只是在列表中调用Add。在您的情况下,您处理它的列表与实际数据分离(因为您在getter中创建了它)。

基本上,它将数据反序列化为留在地板上的对象。