将Dictionary(string, List<string>)序列化为XML

3
可能是重复问题:
将Dictionary<string,string>转换为XML和相反的简单方法 我有一个示例类:
public class SampleClass
{
   public Dictionary<string, List<string>> SampleProperties {get;set;}
}

我希望将这个类序列化为XML格式。 我该如何做呢? 我想要的xml输出结果应该与以下示例类似:
<DataItem>
   <key>
      <value></value>
      <value></value>
      <value></value>
   </key>
</DataItem>

问候


你的字典键是一个字符串。你希望它在生成的 XML 中出现在哪里?能否提供一个示例数据和期望的 XML 示例? - Darin Dimitrov
<DataItem><Name><value>Greg</value><value>Tom</value></Name><City><value>London</value><value>Warsaw</value></City><DataItem>。我想将Name或City保存为键,将value保存为List<string>。 - GrzesiekO
2个回答

8
您可以使用Linq to Xml从SampleClass对象创建所需的xml:
SampleClass sample = new SampleClass();
sample.SampleProperties = new Dictionary<string, List<string>>() {
    { "Name", new List<string>() { "Greg", "Tom" } },
    { "City", new List<string>() { "London", "Warsaw" } }
};

var result = new XElement("DataItem", 
                 sample.SampleProperties.Select(kvp =>
                    new XElement(kvp.Key, 
                      kvp.Value.Select(value => new XElement("value", value)))));
result.Save(path_to_xml);

输出:

<DataItem>
   <Name>
      <value>Greg</value>
      <value>Tom</value>
   </Name>
   <City>
      <value>London</value>
      <value>Warsaw</value>
   </City>
</DataItem>

从xml反序列化:

SampleClass sample = new SampleClass();
sample.SampleProperties = XElement.Load(path_to_xml).Elements().ToDictionary(
                              e => e.Name.LocalName,
                              e => e.Elements().Select(v => (string)v).ToList());

可以的;)你能帮我把XML序列化成这个类吗? - GrzesiekO

1
请尝试以下代码片段。
var dict = new Dictionary<string, List<string>>();
dict.Add("a1", new List<string>(){"a1","a2","a3"});

XElement root = new XElement("DataItem");

foreach(var item in dict)
{
  XElement element = new XElement("Key",item.Key);
  item.Value.ForEach (x => element.Add (new XElement("Value",x)));
  root.Add(element);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接