将Dictionary <string,string>序列化/反序列化为XML

时间:2015-10-30 09:33:50

标签: c#

我正在使用以下代码将字典序列化为XML文件:

[XmlArray]
[XmlArrayItem(ElementName="Element")]
public List<ElementClass> ParameterList
{
    get
    {
        return Parameters.Select(p => new ElementClass() { Key = p.Key, Value = p.Value }).ToList();
    }
    set
    {
        Parameters = value.ToDictionary(x => x.Key, x => x.Value);
    }
}

[XmlIgnore]
public Dictionary<string, string> Parameters { get; set; }

这很好用,生成的XML看起来很好,但是当我反序列化XML时,Dictionary总是空的。我尝试调试代码,但由于某种原因,只有Getter被调用deserilazation。在出现问题的时候,我似乎无法理解它。

1 个答案:

答案 0 :(得分:2)

当XmlSerializer尝试填充ParameterList属性时,它首先检查它是否已有值。如果是,它只是向其添加项目,并且从不设置属性。换句话说,它是这样做的:

var list = obj.ParameterList;
list.Add(deserializedElementClass1);
list.Add(deserializedElementClass2);
...

不是这个:

var list = new List<ElementClass>();
list.Add(deserializedElementClass1);
list.Add(deserializedElementClass2);
...
obj.ParameterList = list;

由于在反序列化期间从不调用ParameterList属性的setter,因此永远不会分配Parameters属性。

在Paul Welter的博客上查看这个XML可序列化的字典实现:http://weblogs.asp.net/pwelter34/444961