使用动态特性读取 XML 结构
Posted
技术标签:
【中文标题】使用动态特性读取 XML 结构【英文标题】:Reading XML structure using dynamic features 【发布时间】: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;
【问题讨论】:
【参考方案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)
【讨论】:
以上是关于使用动态特性读取 XML 结构的主要内容,如果未能解决你的问题,请参考以下文章