C# 将 Dictionary<string, string> 转换为 xml 的简单方法,反之亦然
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1799767/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Easy way to convert a Dictionary<string, string> to xml and vice versa
提问by mrblah
Wondering if there is a fast way, maybe with linq?, to convert a Dictionary<string,string>
into a XML document. And a way to convert the xml back to a dictionary.
想知道是否有一种快速的方法,也许使用 linq?,将 aDictionary<string,string>
转换为 XML 文档。以及一种将 xml 转换回字典的方法。
XML can look like:
XML 可能如下所示:
<root>
<key>value</key>
<key2>value</key2>
</root>
采纳答案by LorenVS
Dictionary to Element:
字典到元素:
Dictionary<string, string> dict = new Dictionary<string,string>();
XElement el = new XElement("root",
dict.Select(kv => new XElement(kv.Key, kv.Value)));
Element to Dictionary:
元素到字典:
XElement rootElement = XElement.Parse("<root><key>value</key></root>");
Dictionary<string, string> dict = new Dictionary<string, string>();
foreach(var el in rootElement.Elements())
{
dict.Add(el.Name.LocalName, el.Value);
}
回答by dcp
You can use DataContractSerializer. Code below.
您可以使用 DataContractSerializer。代码如下。
public static string SerializeDict()
{
IDictionary<string, string> dict = new Dictionary<string, string>();
dict["key"] = "value1";
dict["key2"] = "value2";
// serialize the dictionary
DataContractSerializer serializer = new DataContractSerializer(dict.GetType());
using (StringWriter sw = new StringWriter())
{
using (XmlTextWriter writer = new XmlTextWriter(sw))
{
// add formatting so the XML is easy to read in the log
writer.Formatting = Formatting.Indented;
serializer.WriteObject(writer, dict);
writer.Flush();
return sw.ToString();
}
}
}
回答by Vaibhav
Did something like this for an IDictionary
为 IDictionary 做了这样的事情
XElement root = new XElement("root");
foreach (var pair in _dict)
{
XElement cElement = new XElement("parent", pair.Value);
cElement.SetAttributeValue("id", pair.Key);
el.Add(cElement);
}
That produced the following XML:
这产生了以下 XML:
<root>
<parent id="2">0</parent>
<parent id="24">1</parent>
<parent id="25">2</parent>
<parent id="3">3</parent>
</root>
回答by Nikolay
Just use this for XML to Dictionary:
只需将其用于 XML 到字典:
public static Dictionary<string, string> XmlToDictionary
(string key, string value, XElement baseElm)
{
Dictionary<string, string> dict = new Dictionary<string, string>();
foreach (XElement elm in baseElm.Elements())
{
string dictKey = elm.Attribute(key).Value;
string dictVal = elm.Attribute(value).Value;
dict.Add(dictKey, dictVal);
}
return dict;
}
Dictionary to XML:
字典到 XML:
public static XElement DictToXml
(Dictionary<string, string> inputDict, string elmName, string valuesName)
{
XElement outElm = new XElement(elmName);
Dictionary<string, string>.KeyCollection keys = inputDict.Keys;
XElement inner = new XElement(valuesName);
foreach (string key in keys)
{
inner.Add(new XAttribute("key", key));
inner.Add(new XAttribute("value", inputDict[key]));
}
outElm.Add(inner);
return outElm;
}
The XML:
XML:
<root>
<UserTypes>
<Type key="Administrator" value="A"/>
<Type key="Affiliate" value="R" />
<Type key="Sales" value="S" />
</UserTypes>
</root>
You just pass the element UserTypes to that method and voila you get a dictionary with the coresponding keys and values and vice versa. After converting a dictionary append the element to XDocument object and save it on the disk.
您只需将元素 UserTypes 传递给该方法,瞧,您将获得一个包含相应键和值的字典,反之亦然。转换字典后,将元素附加到 XDocument 对象并将其保存在磁盘上。
回答by Gaurav Madaan
Dictionary<string, string> myDictionary = new Dictionary<string, string>();
myDictionary.Add("key", "value");
myDictionary.Add("key2", "value");
var myJson = JsonConvert.SerializeObject(myDictionary);
var myXml = JsonConvert.DeserializeXNode(myJson.ToString(),"root");
Console.WriteLine(myXml.ToString());
Console.Read();
回答by Bruno Montenegro
I was looking for the same thing with a little difference(string, object) and I solved like this:
我正在寻找相同的东西,但有一点不同(字符串,对象),我是这样解决的:
public static XElement ToXML(this Dictionary<string, object> dic, string firstNode)
{
IList<XElement> xElements = new List<XElement>();
foreach (var item in dic)
xElements.Add(new XElement(item.Key, GetXElement(item.Value)));
XElement root = new XElement(firstNode, xElements.ToArray());
return root;
}
private static object GetXElement(object item)
{
if (item != null && item.GetType() == typeof(Dictionary<string, object>))
{
IList<XElement> xElements = new List<XElement>();
foreach (var item2 in item as Dictionary<string, object>)
xElements.Add(new XElement(item2.Key, GetXElement(item2.Value)));
return xElements.ToArray();
}
return item;
}
...for a dictionary(nested):
...对于字典(嵌套):
var key2 = new Dictionary<string, object>
{
{"key3", "value"},
{"key4", "value"},
};
var key = new Dictionary<string, object>
{
{"key", "value"}
{"key2", key1},
};
...passing "root" as firstNode i get:
...将“root”作为 firstNode 传递,我得到:
<root>
<key>value</key>
<key2>
<key3>value</key3>
<key4>value</key4>
</key2>
</root>
Edited!
已编辑!