Converting XML to a dynamic C# object Converting XML to a dynamic C# object json json

Converting XML to a dynamic C# object


XDocument doc = XDocument.Parse(xmlData); //or XDocument.Load(path)string jsonText = JsonConvert.SerializeXNode(doc);dynamic dyn = JsonConvert.DeserializeObject<ExpandoObject>(jsonText);

I think "cheating" is the answer - the xml solutions are very long :)


An alternative for future visitors, the one from ITDevSpace doesn't include attributes on elements with children.

public class XmlWrapper{    public static dynamic Convert(XElement parent)    {        dynamic output = new ExpandoObject();        output.Name = parent.Name.LocalName;        output.Value = parent.Value;        output.HasAttributes = parent.HasAttributes;        if (parent.HasAttributes)        {            output.Attributes = new List<KeyValuePair<string, string>>();            foreach (XAttribute attr in parent.Attributes())            {                KeyValuePair<string, string> temp = new KeyValuePair<string, string>(attr.Name.LocalName, attr.Value);                output.Attributes.Add(temp);            }        }        output.HasElements = parent.HasElements;        if (parent.HasElements)        {            output.Elements = new List<dynamic>();            foreach (XElement element in parent.Elements())            {                dynamic temp = Convert(element);                output.Elements.Add(temp);            }        }        return output;    }}


Cinchoo ETL - an open source library available to parse xml into dynamic object

using (var p = ChoXmlReader.LoadText(xml).WithXPath("/")){    foreach (dynamic rec in p)        Console.WriteLine(rec.Dump());}

Checkout CodeProject article for some additional help.

Disclaimer: I'm the author of this library.