使用动态功能读取XML结构

时间:2014-09-14 10:33:41

标签: c# xml dynamic xml-parsing linq-to-xml

考虑我有一个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;

1 个答案:

答案 0 :(得分:2)

我相信我已经以博客文章的形式回答了您的问题,您可以在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)
                {
                }
            }

        }