我有一个对象列表List<T>
,我想将它们导出到XML文件,这些对象不可序列化的问题,因为它们来自外部dll。
我正在寻找的是一种获取对象列表并从中生成xml文件的方法。是否有实现,或者我应该手动阅读每个属性并放入xmlelement?
答案 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)))
来代替上一行,以便更直接地更改。
免责声明:如果您要追踪字段,那么应该是从GetProperties
到GetFields
的简单更改。