2013-02-10 33 views
3

我在C#中有一个用于存储数据(如结构体)的类。它有子类作为成员,其中有其他子类,等等,其中每个包含数据(各种字符串,整数,浮点数等)将C#对象存储在SQL Server列中

有没有办法将一个这样的C#对象存储在一个数据库中,在一个单一的柱? 这是什么类型的列,我该如何使用它?

我能想到的唯一的事情就是使用算法将我的结构转换为字节序列并将其存储在二进制类型的字段中。

然后我会使用解码算法将其恢复并使其成为对象。

即便如此,C#中是否有这样的算法可以使用?

+3

你为什么会将对象存储在数据库中?我可以看到隐藏在这个战略背后的数十个问题。 – 2013-02-10 12:56:02

回答

4

看到这个quetion 如果你愿意,你可以在SQL Server中使用VARBINARY(MAX)字段类型。您可以在其中存储任何类型的对象,最大可达2 GB。

访问它,你可以使用ADO.NET - 是这样的:

object yourMysteryObject = (whatever you like it to be); 

MemoryStream memStream = new MemoryStream(); 
StreamWriter sw = new StreamWriter(memStm); 

sw.Write(yourMysteryObject); 

SqlCommand sqlCmd = new SqlCommand("INSERT INTO TableName(VarBinaryColumn) VALUES (@VarBinary)", sqlConnection); 

sqlCmd.Parameters.Add("@VarBinary", SqlDbType.VarBinary, Int32.MaxValue); 

sqlCmd.Parameters["@VarBinary"].Value = memStream.GetBuffer(); 

sqlCmd.ExecuteNonQuery(); 
2

你可以序列化对象JSON,使用JSON.NET(http://json.codeplex.com/)和JSON数据存储在数据库。当你需要重新水合物与数据的对象,这可以通过JSON.NET再次做...

文档是在这里,它很容易使用和非常快:http://james.newtonking.com/projects/json/help/

+2

为什么使用XML和本机功能实现相同的目标时,JSON是第三方工具? – 2013-02-10 13:59:21

+0

@BrianP - 随意使用XML发布解决方案,我发现许多使用XML的问题,而不是用于完全像这样序列化数据的JSON。 – 2013-02-10 14:42:42

+1

@BrianP,你可以通过NuGet获得JSON.NET,并且它被广泛使用。我建议JSON,因为它比xml更轻量。 – christiandev 2013-02-11 09:38:36

相关问题