我想创建一个带有嵌套对象的嵌套元素的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;
}
答案 0 :(得分:1)
如评论中所述,请注意.NET包含将对象图转换为XML的功能,而无需编写任何代码来生成XML。此过程称为序列化,应该很容易在线查找示例或在此处找到示例。
如果您希望完全控制该过程并希望使用反射,Fasterflect包含将对象图转换为XML的代码。它是一个带帮助程序的库,可以使反射更容易,更快速。您可以在this source file中找到XML扩展的代码。请注意,引用的实现确实检测或处理循环引用,而内置的序列化机制则执行。
至于您自己的解决方案,您似乎没有任何代码来检测属性值本身是对象还是原始值。您还需要递归调用遍历方法以获取对象属性,以便处理整个对象图。