【问题标题】:XML serialization or reading from XML Objects?XML 序列化或从 XML 对象读取?
【发布时间】:2011-04-19 17:31:28
【问题描述】:
我需要阅读不同的 XML 文件。我想知道是否应该将文件反序列化为自定义对象,或者只使用 XDocument 对象和 Linq-to-XML 读取数据。
文件大小从 1-2kb 到 3mb+ 不等,不同对象的复杂程度也不同(有些有属性,有些有子级,有些两者兼有,有些没有)。
我认为与 Linq-to-XML 相比,使用对象会更容易,但创建这些对象需要一些时间。对于何时反序列化而不是 Linq,是否有任何经验法则或建议?
感谢您的帮助!
【问题讨论】:
标签:
c#
xml
deserialization
【解决方案1】:
这实际上取决于您对数据的处理方式。如果您没有使用 XML 文档提供的所有信息,那么基于 LINQ 的方法可能是最简单的。考虑获取 RSS 提要,只跟踪文章日期,仅此而已。在这种情况下,使用反序列化技术并不能真正为您做任何事情。
如果您正在使用 XML 文档中的每一个数据,并且它的结构反映了您的对象模型的结构,那么一定要反序列化它。这是我一直在做的事情,比如设置文件,甚至是简单的文件格式。
在您的情况下,它听起来好像已经存在,并且是由某个外部源创建的,并且您的代码中还没有数据的对象表示,所以我建议使用基于 LINQ 的方法。此外,您提到文件中有很多变化,因此 LINQ 的灵活性将再次派上用场。不过,根据您的描述,这是一个疯狂的猜测。
【解决方案2】:
您可以使用xsd.exe 工具,它可以根据您给定的 XML 文件生成这些类:
C:\work>xsd test.xml
C:\work>xsd /classes test.xsd
没有真正的经验法则。我个人更喜欢使用强类型对象,除非文件变大,在这种情况下我切换到 XmlReader。