Conversion de XML en object C # dynamic

J’ai utilisé le code C # suivant pour convertir une chaîne de données JSON en object dynamic à l’aide du framework JSON.Net:

// Creates a dynamic .Net object representing the JSON data var ProductDB = JsonConvert.DeserializeObject(JsonData); 

Une fois converti, je peux accéder directement aux éléments en utilisant un code comme celui-ci:

 // Variables to be used ssortingng ProductID; ssortingng ProductType; int ProductQty; // Loop through each of the products foreach (dynamic product in ProductDB.products) { ProductID = product.id; ProductType = product.type; ProductQty = product.qty; } 

Y a-t-il quelque chose de similaire pour travailler avec des données XML? Je pourrais simplement utiliser JSON.net pour convertir mon XML en JSON, puis réutiliser le code ci-dessus, mais c’est comme sortingcher.

Merci.

  XDocument doc = XDocument.Parse(xmlData); //or XDocument.Load(path) ssortingng jsonText = JsonConvert.SerializeXNode(doc); dynamic dyn = JsonConvert.DeserializeObject(jsonText); 

Je pense que “sortingcher” est la réponse – les solutions XML sont très longues 🙂

Une alternative pour les futurs visiteurs, celle d’ITDevSpace n’inclut pas d’atsortingbuts sur les éléments avec des enfants.

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

De la réponse de @ FSX, j’ai utilisé avec succès la solution de ” Parse XML à un object dynamic en C # “:

 public class XmlToDynamic { public static void Parse(dynamic parent, XElement node) { if (node.HasElements) { if (node.Elements(node.Elements().First().Name.LocalName).Count() > 1) { //list var item = new ExpandoObject(); var list = new List(); foreach (var element in node.Elements()) { Parse(list, element); } AddProperty(item, node.Elements().First().Name.LocalName, list); AddProperty(parent, node.Name.ToSsortingng(), item); } else { var item = new ExpandoObject(); foreach (var atsortingbute in node.Atsortingbutes()) { AddProperty(item, atsortingbute.Name.ToSsortingng(), atsortingbute.Value.Trim()); } //element foreach (var element in node.Elements()) { Parse(item, element); } AddProperty(parent, node.Name.ToSsortingng(), item); } } else { AddProperty(parent, node.Name.ToSsortingng(), node.Value.Trim()); } } private static void AddProperty(dynamic parent, ssortingng name, object value) { if (parent is List) { (parent as List).Add(value); } else { (parent as IDictionary)[name] = value; } } } 

Cinchoo ETL – une bibliothèque open source disponible pour parsingr XML dans un object dynamic

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

Consultez l’article de CodeProject pour obtenir de l’aide supplémentaire.

Disclaimer: Je suis l’auteur de cette bibliothèque.