.net – 将键/值对列表序列化为XML

我有一个我想要存储和从XML文件检索的键/值对的列表。所以这个任务与描述的 here类似。我试图在标记的答案(使用一个keyvaluePair和一个XmlSerializer)遵循建议,但我没有得到它的工作。

到目前为止我是一个“设置”类…

public class Settings
{
    public int simpleValue;
    public List<keyvaluePair<string,int>> list;
}

…这个类的一个实例…

Settings aSettings = new Settings();

aSettings.simpleValue = 2;

aSettings.list = new List<keyvaluePair<string,int>>();
aSettings.list.Add(new keyvaluePair<string,int>("m1",1));
aSettings.list.Add(new keyvaluePair<string,int>("m2",2));

…和以下代码将该实例写入XML文件

XmlSerializer serializer = new XmlSerializer(typeof(Settings));
TextWriter writer = new StreamWriter("c:\\testfile.xml");
serializer.Serialize(writer,aSettings);
writer.Close();

生成文件是:

<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <simpleValue>2</simpleValue>
  <list>
    <keyvaluePairOfStringInt32 />
    <keyvaluePairOfStringInt32 />
  </list>
</Settings>

因此,我的列表中的对的键和值都不存储,尽管元素的数量是正确的。显然我在做一些基本错误的事情。我的问题是:

>如何将列表的键/值对存储在文件中?
>如何将列表中的元素的生成名称keyvaluePairOfStringInt32”更改为我想要的其他名称,如“listElement”?

keyvaluePair不可序列化,因为它具有只读属性Here是更多的信息(感谢Thomas Levesque)。
要更改生成名称,请使用[XmlType]属性

定义你自己的这样:

[Serializable]
[XmlType(TypeName="WhateverNameYouLike")]
public struct keyvaluePair<K,V>
{
  public K Key 
  { get; set; }

  public V Value 
  { get; set; }
}

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念