我是一个C#应用程序。在这个应用程序中,我有一些XML看起来像这样:
string xml = @"<list name=""Groceries"">
<add key=""1"" value=""Milk"" />
<add key=""2"" value=""Eggs"" />
<add key=""3"" value=""Bread"" />
</list>";
我正在尝试将这个XML转换成C#对象。我的类大概长这样:
public class List : ConfigurationElement, IXmlSerializable
{
[ConfigurationProperty("name", IsRequired = true, IsKey = true, DefaultValue = "")]
public string Name
{
get { return (string)(this["name"]); }
set { this["name"] = value; }
}
[ConfigurationProperty("", IsRequired = false, IsKey = false,
IsDefaultCollection=true)]
public KeyValueConfigurationCollection Items
{
get
{
var items = base["items"] as KeyValueConfigurationCollection;
return items;
}
set
{
if (base.Properties.Contains("items"))
{
base["items"] = value;
}
else
{
var configProperty = new ConfigurationProperty("items", typeof(KeyValueConfigurationCollection), value);
base.Properties.Add(configProperty);
}
}
}
public XmlSchema GetSchema()
{
return this.GetSchema();
}
public void ReadXml(XmlReader reader)
{
this.DeserializeElement(reader, false);
}
public void WriteXml(XmlWriter writer)
{
this.SerializeElement(writer, false);
}
public static List Deserialize(string xml)
{
List list= null;
var serializer = new XmlSerializer(typeof(List));
using (var reader = new StringReader(xml))
{
list = (List)(serializer.Deserialize(reader));
}
return list;
}
}
当我运行
var list = List.Deserialize(xml);
时,我会得到一个List
对象。 List
的名称已正确设置。 但是,Items
属性为null
。 为什么Items
没有被反序列化? 我如何使用列出的键/值对填充Items
?谢谢
Items
的getter和setter中使用base [“”]
而不是base [“items”]
,它就可以工作了。此外,我认为setter中的大部分代码都是不必要的。 - steve16351