如何从嵌套对象创建XML文档

本文关键字:创建 XML 文档 对象 嵌套 | 更新日期: 2023-09-27 18:14:23

我想从一个嵌套对象的对象中创建一个嵌套元素的xml文档,但是xml文件太平坦了。我怎么能得到这个迭代对象中的对象,以创建元素中的元素。

public object traverse(object pc, string xpath, XmlDocument xmldoc)
{
    IEnumerable enumerable = pc as IEnumerable;
    if (enumerable != null)
    {
        foreach (object element in enumerable)
        {
            RecurseObject ro = new RecurseObject();
            ro.traverse(elementArray, xpath, xmldoc);
        }
    }
    else
    {                         
        Type arrtype = pc.GetType();
        string elementname = arrtype.Name;
        foreach (var prop in pc.GetType().GetProperties())
        {
            XmlElement xmlfolder = null;
            XmlNode xmlnode3 = null;
            string propname = prop.Name;
            string propvalue = "null";
            if (xmldoc.SelectSingleNode(xpath + "/" + elementname) == null)
            {
                xmlnode3 = xmldoc.SelectSingleNode(xpath);
                xmlfolder = xmldoc.CreateElement(null, elementname, null);
                xmlnode3.AppendChild(xmlfolder);
            }
            if (prop.GetValue(pc, null) != null)
            {
                propvalue = prop.GetValue(pc, null).ToString();
            }
            xmlnode3 = xmldoc.SelectSingleNode(xpath + "/" + elementname);
            xmlfolder = xmldoc.CreateElement(null, propname, null);
            xmlfolder.InnerText = propvalue;
            xmlnode3.AppendChild(xmlfolder);
        }
    }
    return null;
}

如何从嵌套对象创建XML文档

正如在评论中提到的,请注意. net包含将对象图转换为XML的功能,而无需编写任何代码来生成XML。这个过程被称为序列化,应该很容易在网上或在这里找到示例。

如果您希望完全控制过程并希望使用反射,fastreflect包含将对象图转换为XML的代码。它是一个带有帮助程序的库,可以使反射更容易、更快。您可以在这个源文件中找到XML扩展的代码。请注意,被引用的实现不会检测或处理循环引用,而内置的序列化机制可以。

至于您自己的解决方案,您似乎没有任何代码来检测属性值本身是对象还是原始值。为了处理整个对象图,还需要递归地调用对象属性的遍历方法。