0

我想使用 System.Xml.Serialization 反序列化我的类,但我注意到使用 List Properties 的奇怪行为:

它从不调用 set 方法,这导致我丢失重要信息......

我想避免切换序列化方法。

public class Category
{
    private string _name;
    private List<Category> _subCategories;
    private Category _parent;

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    public List<Category> SubCategories
    {
        get { return _subCategories; }
        set
        {
            _subCategories = value;
            foreach (Category category in _subCategories) 
            { 
                category.Parent = this; 
            }
        }
    }

    [System.Xml.Serialization.XmlIgnoreAttribute]
    public Category Parent
    {
        get { return _parent; }
        set { _parent = value; }
    }
}
4

1 回答 1

2

实际上,序列化程序确实设置了该SubCategories属性,但是它将它设置为一个空列表,然后将项目添加到列表中。这就是为什么Parent没有设置孩子的财产。我前段时间写了一篇关于父子关系的XML序列化的文章,你可以在这里找到它。

使用该文章中的解决方案,您的Category课程将如下所示:

public class Category : IChildItem<Category>
{
    private string _name;
    private readonly ChildItemCollection<Category, Category> _subCategories;
    private Category _parent;

    public Category()
    {
        _subCategories = new ChildItemCollection<Category, Category>(this);
    }

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    public ChildItemCollection<Category, Category> SubCategories
    {
        get { return _subCategories; }
    }

    [System.Xml.Serialization.XmlIgnoreAttribute]
    public Category Parent
    {
        get { return _parent; }
        set { _parent = value; }
    }
}
于 2012-04-19T23:24:11.270 回答