考虑我有一个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;
答案 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)
{
}
}
}