C# 反序列化KeyValuePairs列表
我有一些以下格式的XML:C# 反序列化KeyValuePairs列表,c#,xml-serialization,C#,Xml Serialization,我有一些以下格式的XML: <ObjectData> <ModelName>MODEL_123</ModelName> <ObjectName>OBJECT_A</ObjectName> <Values> <KeyValuePair> <Key>NAME</Key> <Value>PAUL</Value> <
<ObjectData>
<ModelName>MODEL_123</ModelName>
<ObjectName>OBJECT_A</ObjectName>
<Values>
<KeyValuePair>
<Key>NAME</Key>
<Value>PAUL</Value>
</KeyValuePair>
...
</Values>
</ObjectData>
...
KeyValuePair
类是否不能以我使用它的方式序列化?或者我的ObjectData
类中有问题吗?尝试在属性中指定元素名称:
[XmlArray("Values")]
[XmlArrayItem("KeyValuePair")]
public List<KeyValuePair<string, string>> Values { get; set; }
[XmlArray(“值”)]
[XmlArrayItem(“KeyValuePair”)]
公共列表值{get;set;}
中没有键
或值
的设置器。您必须更改数据类型。您可以装饰该属性,以便可以根据需要命名新类型
....
[XmlArray("Values")]
[XmlArrayItem("KeyValuePair")] //not needed if MyItem is named KeyValuePair
public List<MyItem> Values { get; set; }
}
public class MyItem
{
public string Key { get; set; }
public string Value { get; set; }
}
。。。。
[XmlArray(“值”)]
[XmlArrayItem(“KeyValuePair”)]//如果MyItem命名为KeyValuePair,则不需要
公共列表值{get;set;}
}
公共类MyItem
{
公共字符串密钥{get;set;}
公共字符串值{get;set;}
}
结合D Stanley的回答,我能够想出正确的结构:
[XmlRoot(Namespace = "")]
public class ObjectData
{
[XmlElement(Namespace = "")]
public string ModelName { get; set; }
[XmlElement(Namespace = "")]
public string ObjectName { get; set; }
[XmlArray("Values")]
[XmlArrayItem("KeyValuePair")]
public List<KeyValuePair<string, string>> Values { get; set; }
}
[Serializable]
public class KeyValuePair<K, V> {
public K Key { get; set; }
public V Value { get; set; }
public KeyValuePair() { }
public KeyValuePair(K key, V value)
{
this.Key = key;
this.Value = value;
}
}
[XmlRoot(Namespace=”“)]
公共类对象数据
{
[XmlElement(名称空间=”)]
公共字符串ModelName{get;set;}
[XmlElement(名称空间=”)]
公共字符串ObjectName{get;set;}
[XmlArray(“值”)]
[XmlArrayItem(“KeyValuePair”)]
公共列表值{get;set;}
}
[可序列化]
公共类KeyValuePair{
公钥{get;set;}
公共V值{get;set;}
公钥值对(){}
公钥值对(K键,V值)
{
这个。键=键;
这个。值=值;
}
}
请不要在标题前加上“C”之类的前缀。这就是标签的用途。可能的重复不是真正的重复。那篇文章确实帮助我找到了解决方案,但我还有第二个要求,那就是将它反序列化为List@John我明白你的意思,但我认为这有助于以后在搜索引擎中找到标题。事实上,这没有帮助。标签在任何情况下都会进入搜索引擎优化。这现在给了我正确的键值对计数,但键值和值仍然显示为空。我尝试按照您的建议删除[XmlArrayItem(“KeyValuePair”)]
,但没有它我的列表是空的。@Paul:您创建了名为KeyValuePair
的类吗?是的<代码>公共类KeyValuePair{…}示例类不是泛型类。通用版本将序列化为KeyValuePairOfStringString
(或类似的东西…)。
....
[XmlArray("Values")]
[XmlArrayItem("KeyValuePair")] //not needed if MyItem is named KeyValuePair
public List<MyItem> Values { get; set; }
}
public class MyItem
{
public string Key { get; set; }
public string Value { get; set; }
}
[XmlRoot(Namespace = "")]
public class ObjectData
{
[XmlElement(Namespace = "")]
public string ModelName { get; set; }
[XmlElement(Namespace = "")]
public string ObjectName { get; set; }
[XmlArray("Values")]
[XmlArrayItem("KeyValuePair")]
public List<KeyValuePair<string, string>> Values { get; set; }
}
[Serializable]
public class KeyValuePair<K, V> {
public K Key { get; set; }
public V Value { get; set; }
public KeyValuePair() { }
public KeyValuePair(K key, V value)
{
this.Key = key;
this.Value = value;
}
}