将C#类直接序列化到SQL服务器?

任何人都可以建议将数据(实际上是一个类)序列化到数据库的最佳方法吗?

我正在使用SQL Server 2008,但我认为我需要在存储到数据库之前将类序列化为字符串/或其他数据类型?

我认为这个字段需要是文本还是二进制?

SQL Server 2008(或.net 3.5)是否支持直接对数据库进行序列化?

任何帮助真的很感激

您可以将xml序列化为xml字段。 我们一直使用它来在ETL中进行exception记录。

使用XmlSerializer,您可能需要一个帮助器方法,将类序列化为字符串…

public static string SerializeToXml(T value) { StringWriter writer = new StringWriter(CultureInfo.InvariantCulture); XmlSerializer serializer = new XmlSerializer(typeof(T)); serializer.Serialize(writer, value); return writer.ToString(); } 

然后就像其他任何一样将字符串放入db中。

在数据库中存储数据的最佳方法是在列(每个属性)中,以便它是可查询和可索引的。 ORM工具将有助于此。

但是,也可以将类序列化为CLOB / BLOB( varchar(max) / varbinary(max)等)。

这就是你想要的,避免任何特定于实现或版本不容忍; 特别是,不要使用BinaryFormatter 。 任何以合同为基础的都应该有效; XmlSerializerDataContractSerializer等。或者对于快速二进制,protobuf-net可能值得一看。

但我强调; 列会更好。

没有仿制药(更好的溶剂)

 public static string SerializeToXml(object value) { StringWriter writer = new StringWriter(CultureInfo.InvariantCulture); XmlSerializer serializer = new XmlSerializer(value.GetType()); serializer.Serialize(writer, value); return writer.ToString(); } 

我已将对象序列化为XML并将其抛入数据库中。 由于我们知道文本的最大数量,因此我们使用varchar(max)数据类型而不是进入TEXT或二进制格式。

这是一个OLTP Web应用程序,我们发现有一件事是使用带有xml数据类型的列调用了一些重要的cpu​​用法,因为xml在每个插入上都经过validation。 在我们的例子中,xml从未被查询过任何东西,所以没有xml查询function对我们来说没问题。

查看Linq-to-SQL( 有关SO的问题 , MSDN 上的 资源 )或其他OR映射选项。

有几种选择:

运行时序列化,可序列化对象使用Serializable属性标记,在这种情况下,IFormatter类执行序列化的所有工作。 可序列化对象可以是ISerializable,但是您需要实现GetObjectData()方法。 运行时序列化的问题是读取xml数据的程序需要具备CLR类型的知识。

Xml序列化:取消运行时序列化,在这种情况下,您将获得良好的互操作性。 XmlSerializer类型包含方法Serialize()和Deserialize(),因此任何对象都可以序列化为XML并保存到数据库中,当您将其返回时,可以轻松地反序列化它。

要从数据库中读取数据,可以使用执行SQL查询的SqlCommand类方法,即ExecuteXmlReader()。 ExecuteXmlReader()返回XmlReader的一个实例,它将读取您的xml数据。