Easy way to convert a Dictionary<string, string> to xml and vice versa Easy way to convert a Dictionary<string, string> to xml and vice versa xml xml

Easy way to convert a Dictionary<string, string> to xml and vice versa


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


You can use DataContractSerializer. Code below.

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


Just use this for XML to Dictionary:

     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:

 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:

<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.