Ade*_*erd 3 .net c# xml-serialization xml-deserialization xml-parsing
我有一个非常长的,非常多样的XML文件,我试图将部分存储到数据库中.现在,我不想通过手工编写10,000个不同的对象来存储反序列化的数据.有没有办法根据XML文件中的内容定义一个Object?
例如,如果我有:
<objecttype1>
<attr1>Some string of text</attr1>
</objecttype1>
<objecttype1>
<attr2>123456789</attr2>
</objecttype1>
Run Code Online (Sandbox Code Playgroud)
我希望定义一个类似于以下的对象:
public class objecttype1 {
public string attr1 {get; set;}
public string attr2 {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
基本上,我想将整个xml文档反序列化为各种不同的对象,其中某种层次结构代表原始的xml文档,然后从这些对象中提取数据以根据其类型放入我的数据库.有没有办法/更好的方法来做到这一点?
您正在寻找ExpandoObject.
ExpandoObject是C#4中引入的动态对象.此处的
示例实现:
public static IEnumerable<dynamic> GetExpandoFromXml(string file, string descendantid)
{
var expandoFromXml = new List<dynamic>();
var doc = XDocument.Load(file);
var nodes = doc.Root.Descendants(descendantid);
foreach (var element in doc.Root.Descendants(descendantid))
{
dynamic expandoObject = new ExpandoObject();
var dictionary = expandoObject as IDictionary<string, object>;
foreach (var child in element.Descendants())
{
if (child.Name.Namespace == "")
dictionary[child.Name.ToString()] = child.Value.Trim();
}
yield return expandoObject;
}
}
Run Code Online (Sandbox Code Playgroud)
更多链接:
http://www.codeproject.com/Tips/227139/Converting-XML-to-an-dynamic-object-using-ExpandoO
http://www.codeproject.com/Articles/461677/Creating-a-动态对象从-XML的使用-ExpandoOb