使用动态功能读取XML结构

本文关键字:XML 结构 读取 功能 动态 | 更新日期: 2023-09-27 18:21:52

考虑我有一个XML文件,它被加载到XElement或类似的文件中。达到标记值的一种方法是使用Element()方法。

有没有任何方法可以使用动态对象来促进这一点。例如,我想更换

var val = xelement.Element("Name").Value

带有

var dyn = (dynamic)xelement;
var val = dyn.Name;

拥有嵌套属性也是个好主意。例如:

var val = dyn.Person.Name;

甚至更好:

var val = dyn.Children.Where(c=>c.Name == "Mehran").FirstOrDefault().Age;

使用动态功能读取XML结构

我相信我已经以博客文章的形式回答了你的问题,你可以在http://blog.waseem-sabjee.com/2014/09/14/how-to-convert-an-xml-document-to-a-dynamic-object-in-net/

博客文章还包含一个工作解决方案的下载链接。

这里有一些实现代码供您查看:(注意ToDynamicList方法是一个扩展方法,它的代码可以在我的博客上找到。)

            XElement doc = XElement.Load(reader);
            // using our ToDynamicList (Extenion Method)
            var people = doc.ToDynamicList();
            // loop through each person
            foreach (dynamic person in people.Where(X => X.Name == "Waseem"))
            {
                Console.WriteLine("id:'t" + person.Id);
                Console.WriteLine("Name:'t" + person.Name);
                Console.WriteLine("Age:'t" + person.Age);
                Console.WriteLine("----------------------------------");
                try
                {
                    // loop through children, if any
                    foreach(dynamic child in person.Children)
                    {
                        Console.WriteLine("'tid:'t" + child.Id);
                        Console.WriteLine("'tName:'t" + child.Name);
                        Console.WriteLine("'tAge:'t" + child.Age);
                    }
                    Console.WriteLine("----------------------------------");
                }
                catch(Exception ex)
                {
                }
            }
        }