使用动态功能读取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;
我相信我已经以博客文章的形式回答了你的问题,你可以在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)
{
}
}
}