序列化/反序列化字典<;字符串,字符串>;到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调用。我似乎不知道哪里出了问题。
当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