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

mar*_*ith 22 .net c# sql-server serialization

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

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

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

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

任何帮助真的很感激

Nee*_*ack 36

您可以将类序列化为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();
}
Run Code Online (Sandbox Code Playgroud)

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

  • @tom - 因为这里不需要通用的.您也可以使用"对象值",然后在构造序列化程序时调用"value.GetType()". (2认同)
  • 我喜欢这种方法,但我很难反序列化XML.我想确定XML中的类型并反序列化回原始对象... (2认同)

Mar*_*ell 20

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

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

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

但我强调; 列会更好.

  • @Namir,因为它实际上是"Some.Namespace.Person,Some.Assembly.dll,1.0.23.4",如果你重构可能会出现问题(我已经看过很多次这会伤害别人),它是.NET特有的(无法加载到另一个平台,并取决于字段名称(更好的希望没有人切换到自动实现的属性,因为这会破坏).它有一个太多序列化的习惯(通过事件),并导致(没有)大麻烦)你***不能***你的数据.哦,它既不特别小,不是特别快. (5认同)