有人能建议一下将数据(实际上是一个类)序列化到数据库的最佳方法吗?
我正在使用 SQL Server 2008,但我认为在存储到数据库之前需要将类序列化为字符串或其他数据类型?
我认为这个字段需要是文本或二进制??
SQL Server 2008(或 .NET 3.5)是否支持直接将序列化后的数据存储到数据库中?
非常感谢任何帮助
有人能建议一下将数据(实际上是一个类)序列化到数据库的最佳方法吗?
我正在使用 SQL Server 2008,但我认为在存储到数据库之前需要将类序列化为字符串或其他数据类型?
我认为这个字段需要是文本或二进制??
SQL Server 2008(或 .NET 3.5)是否支持直接将序列化后的数据存储到数据库中?
非常感谢任何帮助
您可以将该类xml序列化成一个xml字段。我们经常在ETL中用于异常日志记录。
使用XmlSerializer,您可能需要在某个地方编写一个辅助方法,将该类序列化为字符串...
public static string SerializeToXml<T>(T value)
{
StringWriter writer = new StringWriter(CultureInfo.InvariantCulture);
XmlSerializer serializer = new XmlSerializer(typeof(T));
serializer.Serialize(writer, value);
return writer.ToString();
}
在数据库中存储数据的最佳方法是按列 (按属性) 存储,这样可以进行查询和索引。使用ORM工具可以帮助实现。
不过,还可以将类序列化为CLOB/BLOB (varchar(max)
/varbinary(max)
等)。
如果您需要这样做,请避免使用任何特定于实现或版本不兼容的东西; 特别是不要使用BinaryFormatter
。基于协议的任何内容都应该能够工作;比如XmlSerializer
、DataContractSerializer
等。或者对于快速二进制,也可以考虑使用 protobuf-net。
但我强调,按列存储会更好。
List<Person>()
),有什么问题吗?你能简单地解释一下吗?谢谢。 - Royi Namirpublic 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。在我们的情况下,从未查询过xml,因此没有xml查询功能对我们来说也没问题。
有几个选项:
运行时序列化,可序列化的对象标记为Serializable属性,在这种情况下,IFormatter类执行所有序列化工作。可序列化的对象可以是ISerializable,但是您需要实现GetObjectData()方法。运行时序列化的问题在于读取xml数据的程序需要了解CLR类型。
Xml序列化:与运行时序列化不同,这种情况下您将获得良好的互操作性。XmlSerializer类型包含Serialize()和Deserialize()方法,因此任何对象都可以序列化为XML并保存到数据库中,当您检索它时,可以轻松地进行反序列化。
要从数据库中读取数据,可以使用SqlCommand类方法执行SQL查询,即ExecuteXmlReader()。ExecuteXmlReader()返回一个XmlReader实例,它将读取您的xml数据。