将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
。 任何以合同为基础的都应该有效; XmlSerializer
, DataContractSerializer
等。或者对于快速二进制,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数据。
- 没有明确的ServicePointManager.SecurityProtocol调用,在.NET 4.7中没有协商TLS 1.2
- c#字符串是引用类型 – 为什么当我更改引用A的值时,引用B不会改变?
- 如何非递归地定义“原始”类型?
- 无法创建“匿名类型”类型的常量值。 在此上下文中仅支持原始类型或枚举类型
- 如何摆脱“API限制UnitTestFramework.dll已加载”错误?
- 为什么我的表单身份validation票证到期如此之快?
- 在Windows 8 Metro风格的应用程序中使用.NET GeoCoordinate.GetDistanceTo等效
- 在特定领域有所区别
- 如何将对象强制转换为在运行时提取的Type