我的c#对象使用哪种序列化来将它们保存在SQL数据库中



我正在寻找一些建议,这可能是没有硬性和快速的答案,但任何想法都是感激的。这个应用程序非常典型。这是一个c#代码,目前使用VS2010。该代码用于向最终用户提供来自模型的数据。模型本身是基于固定点(一个"立方体")的一些已知数据,各种参数和设置。在标准编程实践中,用户通过公共"get"函数访问数据,而这些函数又依赖于私有成员变量,如已知数据和设置。到目前为止都很标准。现在,我想将向用户提供这些数据的类保存到一个sql数据库中——主要是为了让所有用户可以共享相同的数据(或者更准确地说,是模型生成的数据)。

当然,我可以取类的每个成员变量,并使用sql数据库将它们写入db,并从这些重新实例化类。但是我不想错过所有的好东西。net & &;c#必须提供。所以我想做的是序列化对象并使用linq to sql将其注入数据库。链接到sql部分很简单,但是当涉及到序列化时,我是一个完全的新手,我有点担心/困惑。似乎显而易见的事情是将对象格式化为xml,并将其作为sql数据类型"xml"的表中的一列写入数据库。但这给我留下了几个问题。

根据我的理解,标准XMLserializer只会将类的公共成员写入xml。这对我来说似乎是不可能的,因为我的类设计是基于将大部分类保持为私有的(使用所有公共成员编写类超出了我的经验范围——谁会这样做呢?)这促使我考虑使用DataContractSerializer,您可以在其中选择要序列化的变量。然而,这似乎有一些WCF依赖,我想知道使用它的潜在缺点是什么。此外,还有SoapFormatter,它似乎在web应用程序和JSON中更为流行。我没有考虑过这些,但也许我应该考虑一下?也许有更好的方法来解决这个问题?可能有点啰嗦,但希望所有的背景都能有所帮助,这样人们就能给我一些建议。

我也有类似的需求,并且在这方面做了相当多的研究。我使用XMLSerialization、JSON、BinraryFormatter做了许多概念验证项目,不要忘了还有一些自制的技巧。我几乎决定使用JSON (JSON.NET),直到我发现protobuf-net!它速度快,体积小,与版本无关,支持继承,并且无需对代码进行太多更改即可轻松实现。建议严重。

如果将对象存储为XML,则很难从数据库中使用它。例如,如果将客户对象存储为XML,如何编写以下代码?

select * from Customers where LastName = 'Obama'

这是可以做到的,但并不容易。

如何将对象映射到数据库是一个有争议的主题。很容易上手的框架在应用程序的后期可能会变得过于复杂。由于大多数应用程序在维护上花费的时间比在初始开发上花费的时间要多,所以我会使用最简单的模型。

纯ADO。NET或Dapper都是很好的竞争者。您将编写更多的样板代码,但复杂性的降低远远弥补了这一点。

最新更新