I've used the following C# code to convert a string of JSON data to a dynamic object using the JSON.Net framework:
// Creates a dynamic .Net object representing the JSON data var ProductDB = JsonConvert.DeserializeObject<dynamic>(JsonData);
Once converted, I can access the elements directly using code like this:
// Variables to be used string ProductID; string ProductType; int ProductQty; // Loop through each of the products foreach (dynamic product in ProductDB.products) { ProductID = product.id; ProductType = product.type; ProductQty = product.qty; }
Is there anything similar to this for working with XML data? I could just use JSON.net to convert my XML to JSON and then re-use the code above, but that feels like cheating.
Thanks.
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; } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With