【问题标题】:Reading XML structure using dynamic features使用动态特性读取 XML 结构
【发布时间】:2014-11-08 01:16:28
【问题描述】:

假设我有一个 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;

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多