是否有将对象列表导出到xml文件的通用实现?
本文关键字:文件 实现 xml 对象 列表 是否 | 更新日期: 2023-09-27 17:49:45
我有一个对象List<T>
列表,我想将它们导出到XML文件,这些对象是不可序列化的问题,因为它们来自外部dll。
我要找的是一个方法,它采取对象列表并从中生成xml文件。是否有实现,或者我应该手动读取每个属性并放入xmlelement?
您应该能够在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)))
替换为前一行,以便进行更直接的更改。
免责声明:如果你是在字段之后,那么它应该是一个简单的改变,从GetProperties
到GetFields
。