字符串集合值在保存时重复,然后从XML重新加载它

本文关键字:新加载 XML 加载 集合 保存 字符串 然后 | 更新日期: 2023-09-27 18:05:30

嗯,我得到了非常奇怪的问题,当我在属性网格中填充一个值的字符串集合时,然后我将其保存到XML,当我重新加载XML并检查字符串集合时,我发现值是重复的。

每次保存和重新加载时都会出现

字符串集合值在保存时重复,然后从XML重新加载它

你没有发布任何代码,所以我要猜测问题,正如你所描述的,你正在序列化一个字符串集合到xml文件,但是当你反序列化它时,你注意到记录是重复的,这是常见的情况,当你的集合首先在类中具有默认值,所以当你从xml反序列化它时,xml序列化器不会创建一个新的字符串集合,相反,它使用列表中的Add方法,并将字符串附加到现有集合中。例子:

[Serializable()]
public class Foo
{
    private List<string> _myList = new List<string>(new string[] { "Some", "Data" });
    public List<string> MyList
    {
        get { _myList = value;}
        set { return _myList; }
    }
    public Foo() {}
}

在之前的课程"Foo"中,如果您创建一个新的实例Foo foo = new Foo();并将其序列化为xml,它将序列化正确,但当您反序列化它时,您会发现集合项已重复"Some, Data, Some, Data"

这个问题是如何解决的:在第2行:当我做_AttributesCustomList私有,字符串集合不重复,当我加载XML…我真的不知道为什么,但无论如何,问题解决了。

    [XmlElement("AttributesCustomList")]
    public list<string> _AttributesCustomList;
    [CategoryAttribute("Custom"), ReadOnly(false),
    Description("This property is customised to put new attributes")]
    //[RefreshProperties(RefreshProperties.All)]
    [RulesCriteria("Custom AttributesList")]
    public list<string> AttributesCustomList
    {
        get { return _AttributesCustomList; }
        set { _AttributesCustomList = value; }
    }