我正在使用以下代码将字典序列化为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。在出现问题的时候,我似乎无法理解它。
答案 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