que estaba buscando lo mismo con una pequeña diferencia (cadena, objeto) y lo solucioné así:
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;
}
... de un diccionario (anidada):
var key2 = new Dictionary<string, object>
{
{"key3", "value"},
{"key4", "value"},
};
var key = new Dictionary<string, object>
{
{"key", "value"}
{"key2", key1},
};
... pasando "root" como firstNode me sale:
<root>
<key>value</key>
<key2>
<key3>value</key3>
<key4>value</key4>
</key2>
</root>
¡Editado!
puede usar ToDictionary ... * rootElement.Elements(). ToDictionary (clave => clave.Nombre, val => val.Valor); * –
¿Qué ocurre con los valores XML anidados? Por ejemplo: " valor 1 valor2 " –