是否存在将对象列表导出到xml文件的通用实现?

时间:2014-03-13 01:22:46

标签: c# xml linq-to-xml

我有一个对象列表List<T>,我想将它们导出到XML文件,这些对象不可序列化的问题,因为它们来自外部dll。

我正在寻找的是一种获取对象列表并从中生成xml文件的方法。是否有实现,或者我应该手动阅读每个属性并放入xmlelement?

1 个答案:

答案 0 :(得分:2)

您应该可以在Select上嵌套new XElement方法,就像这样: (注意:你可以通过重载ToString让这变得非常简单(编辑:我现在意识到,你没有这种访问权限。我会留在那里寻找其他任何人解决类似问题。))

new XElement("Data", MyList.Select(cl => cl.ToXml() + ","))

“我的列表”是你的List<T>ToXml,你精心设计的方法会从列表中的每个类中吐出数据。

这是1班轮方法。如果使用此方法,您真正需要做的就是在加载数据时忽略尾随逗号 - 或者 - 您可以在离开方法之前修剪它。

上面只有如果,所有实例数据都有一些非常方便的输出属性或方法。如果那不存在,那么你将不得不手写它们,或者你可能能够使用反射。由于尚未使用它,我不能100%确定反射。

编辑:哇哦!学习如何使用反射! 我的电脑没爆炸!

现在这已经超出了我的系统,这是另一个应该产生所有设置属性名称和值的1-liner。 (注意:你真的应该使用某种形式的检查,除非你绝对确定你所获得的所有属性都是在构造时确定的)

var output = foo.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).Select(p => p.Name + ", " + p.GetValue(foo, null))

这会产生一个IEnumerable<string>,其中包含所有属性名称及其所需的值。您应该可以使用Select(p => new XElement(p.Name, p.GetValue(foo, null)))来代替上一行,以便更直接地更改。

免责声明:如果您要追踪字段,那么应该是从GetPropertiesGetFields的简单更改。