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

本文关键字:文件 实现 xml 对象 列表 是否 | 更新日期: 2023-09-27 17:49:45

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

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

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

您应该能够在new XElement上嵌套Select方法,如下所示:(注释:您可以通过重载ToString来使这非常容易(编辑:我现在意识到,您没有那种访问。我把它留在这里,供其他寻找类似问题解决方案的人参考。

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

其中"MyList"是你的List<T>ToXml是你精心设计的方法,从列表中的每个类中吐出数据。

这是一种线性方法。如果使用这种方法,您真正需要做的就是在加载数据时忽略后面的逗号-或者-您可以在离开方法之前修剪它。

只有在为所有实例数据提供了一些非常方便的输出属性或方法时,上面的才能工作。如果不存在,那么您将不得不手写它们,或者您可以使用反射。我不能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