2010-07-28 91 views
0

我目前正在编写一个应用程序来管理一些客户。客户与订单有一些关系。你可以想象这就像北风数据库。我想将数据保存在一个xml文件中。我的应用程序应该读取,修改和保存数据。我认为,有两种方法。第一种方法是使用XmlSerializer类保存,读取和修改数据。第二种方法是使用LINQ到XML进行操作。我所有的类都是用简单的C#类编写的。所以,我不确定。你怎么看?我应该用什么来满足我的需求?序列化与LINQ

在此先感谢!

回答

9

LINQ to XML适用于查询XML文档。

如果你正在序列化/反序列化一个对象,我会把它留给XmlSerializer类。

+0

我同意序列化你应该使用XmlSerializer类。 – mpenrow 2010-07-28 17:16:11

+0

@Justin Niessner:你能否提一下为什么你认为XmlSerializer在序列化的情况下比LINQ更好的原因?此外,如果我的类定义和XML模式不会改变,那么为什么不使用LINQ,因为对象将始终以特定结构序列化? – Learner 2012-06-22 05:18:16

0

您真的确定要为此使用XML吗?您可以使用SQL Server Compact Edition将SQL Server功能内置到已编译的应用程序中,而无需外部占用空间。数据库确实比按照您所描述的方式使用XML更好。

+0

是的,我想使用XML格式。 – Carnation 2010-07-28 16:44:57

0

做序列化时有很多事情需要考虑。尽管以下内容与C++有关,但它讨论了序列化的一些复杂性以及序列化时要使用的数据结构。

http://www.parashift.com/c++-faq-lite/serialization.html

此外,如果另一个应用程序将要使用输出序列化,我会避免使用XmlSerializer类和构建自己的架构与数据迁移和记向后兼容性。

0

如果您改变主意以在EF或Linq中设置SQL,Linq to XML会更容易。

0

我会建议您使用DataContractSerializer而不是XmlSerializer。 XmlSerializer的仍然支持,但是,只有严重的bug被固定(见10/1/2008到XSD.EXE - Incorrect Class Generated for Abstract Type With Derived Types评论:

不幸的是,我们只有积极主动地固定在XmlSerializer的最关键的客户影响力的问题, XSD.EXE。如果这个问题造成的业务影响,请联系Microsoft产品支持服务,我们会很乐意去探索各种选择。

唯一的缺点,如果它是一个,是XmlSerializer的允许你详细控制在XML的格式上,如果你只是为了自己的目的而使用XML,那么这并不重要,而且速度和特性的改进DataContractSerializer的一套应该对你很有吸引力。

顺便说一句,它允许你“两全其美”。它可以将数据序列化为二进制形式的XML,它更紧凑,但仍然是XML,可以通过XmlDictionaryReader类(它是一个XmlReader)读入。