[英]vb.net object persisted in database
如何将vb.net用户定义的对象存储在sql数据库中。 我不尝试使用列复制属性。 我的意思是将对象转换或编码为字节数组,然后将其存储在db的字段中。 就像您在会话中存储对象的实例时一样,但是我需要该信息来保留当前会话。
@猎户座爱德华兹
这不是立场问题。 这是因为有一天,您将更改代码。 然后,您将尝试反序列化旧对象,并且您的程序将崩溃。
我的程序不会“ CRASH”,它将引发异常。 对我来说幸运的是,.net有一系列专门针对此类场合的类。 到那时,我将刷新陈旧的数据并将其放回数据库。 这就是这一领域的重点(或视情况而定)。
您可以使用序列化 -它允许您至少以3种形式存储对象:二进制(适用于BLOB),XML(利用MSSQL的XML数据类型)或仅纯文本(存储在varchar或text列中)
在走上通往自己最终的精神错乱的道路之前,您应该看一下(或重复一天):
http://thedailywtf.com/Articles/The-Mythical-Business-Layer.aspx
在数据库中保留对象不是一个好主意。 它杀死了数据库设计要做的所有美好事情。
您可以使用BinaryFormatter类将对象序列化为二进制格式,然后将结果字符串保存在数据库中。
.net 3.x中的XmlSerializer或DataContractSerializer将为您完成这项工作。
@ aku,lomaxx和bdukes-您正在寻找的解决方案。
@ 1800信息-我很感谢您在此问题上的立场,但是这是我从一个每月仅更新一次的Web服务获取的数据的特例。 我不需要以db形式保存的数据,因为那是web服务的用途。 下面是我终于开始工作的代码。
连载
#'res is my object to serialize
Dim xml_serializer As System.Xml.Serialization.XmlSerializer
Dim string_writer As New System.IO.StringWriter()
xml_serializer = New System.Xml.Serialization.XmlSerializer(res.GetType)
xml_serializer.Serialize(string_writer, res)
反序列化
#'string_writer and xml_serializer from above
Dim serialization As String = string_writer.ToString
Dim string_reader As System.IO.StringReader
string_reader = New System.IO.StringReader(serialization)
Dim res2 As testsedie.EligibilityResponse
res2 = xml_serializer.Deserialize(string_reader)
您要做的就是将对象“序列化”,.Net有几种不同的处理方法。 一种是System.Xml.Serialization命名空间中的XmlSerializer类。
另一个是在System.Runtime.Serialization命名空间中。 它支持SOAP格式化程序,二进制格式化程序以及可以从中继承的基类,所有这些都实现了公共接口。
对于您所说的,前面建议的BinaryFormatter可能会具有最佳性能。
我支持@ 1800这方面的信息。
序列化对象以进行长期存储绝不是一个好主意
我很感谢您在此问题上的立场,但这是我从Web服务获取的数据的特例,该服务每月仅更新一次。
这不是立场问题。 这是因为有一天,您将更改代码。 然后,您将尝试反序列化旧对象,并且您的程序将崩溃。
如果崩溃(或引发异常),您所剩下的就是一堆二进制数据,尝试并筛选以重新创建对象。
如果只保留二进制文件,为什么不直接保存到磁盘。 如前所述,您可能还想使用xml之类的东西,如果您更改对象定义,那么您可能需要一些艰苦的工作才能对它进行反序列化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.