序列化/反序列化字典<;字符串,字符串>;到XML

本文关键字:字符串 gt XML lt 反序列化 字典 序列化 | 更新日期: 2023-09-27 18:19:50

我正在用以下代码将字典序列化为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被取消了rilization调用。我似乎不知道哪里出了问题。

序列化/反序列化字典<;字符串,字符串>;到XML

当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