2009-11-25 59 views

回答

73

字典元素:

Dictionary<string, string> dict = new Dictionary<string,string>(); 
XElement el = new XElement("root", 
    dict.Select(kv => new XElement(kv.Key, kv.Value))); 

元到詞典:

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); 
} 
+18

你可以使用ToDictionary ... * rootElement.Elements()。ToDictionary(key => key.Name,val => val.Value); * – 2009-11-25 20:44:37

+0

嵌套的XML值如何?例如:「 value 1 value2」 – 2017-11-03 14:03:29

10

可以使用的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(); 
      } 
     } 
    } 
4

做了一件這樣的一個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); 
} 

這產生了以下XML:

<root> 
    <parent id="2">0</parent> 
    <parent id="24">1</parent> 
    <parent id="25">2</parent> 
    <parent id="3">3</parent> 
</root> 
6

就用這個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; 
     } 

詞典到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; 
     } 

的XML:

<root> 
    <UserTypes> 
    <Type key="Administrator" value="A"/> 
    <Type key="Affiliate" value="R" /> 
    <Type key="Sales" value="S" /> 
    </UserTypes> 
</root> 

你只需將元素UserTypes該方法,瞧你獲得與coresponding鍵和值,反之亦然字典。轉換字典後,將元素附加到XDocument對象並將其保存在磁盤上。

+0

DictToXml()中的小錯誤。這裏是循環的修正版本。 [code] foreach(鍵中的字符串鍵) { XElement inner = new XElement(valuesName); inner.Add(new XAttribute(「key」,key)); inner.Add(new XAttribute(「value」,inputDict [key])); outElm。添加(內); } [/ code] – 2015-11-02 20:29:58

2
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(); 
+0

我已經使用NewtonSoft.Json包爲JsonConvert – 2016-05-05 08:13:02

+0

它將給出一個xml格式的數據或json文件數據。 – 2017-01-13 12:15:05

1

我一直在尋找同樣的東西一點點差別(字符串對象)和我解決這樣的:

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; 
} 

...的字典(嵌套):

var key2 = new Dictionary<string, object> 
       { 
        {"key3", "value"}, 
        {"key4", "value"}, 
       }; 

var key = new Dictionary<string, object> 
       { 
        {"key", "value"} 
        {"key2", key1}, 
       }; 

...傳遞 「根」 作爲firstNode我得到:

<root> 
    <key>value</key> 
    <key2> 
     <key3>value</key3> 
     <key4>value</key4> 
    </key2> 
</root> 

已編輯!

相關問題