通用XML反序列化为未定义的对象

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文档,然后从这些对象中提取数据以根据其类型放入我的数据库.有没有办法/更好的方法来做到这一点?

RAS*_*RAS 7

您正在寻找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