如何将可序列化对象保存到数据库字段

时间:2011-02-14 22:11:33

标签: linq-to-sql

我正在使用linq到sql,我需要将一些可序列化对象保存到我们的sql server数据库中的字段。我已经将字段定义为varbinary(MAX),但我并不是100%确定这是正确的。那么,有没有人知道如何将对象保存到该字段然后再读回来?感谢。

2 个答案:

答案 0 :(得分:0)

我认为这取决于对象序列化的格式。例如,如果要序列化为xml,则sql server(至少是最新版本)支持xml类型。如果您确实要序列化为二进制,那么坚持使用二进制文件可能没问题。选择与序列化类型类似的db类型将最小化将db类型桥接到对象类型的转换。

答案 1 :(得分:0)

我已经获得了序列化的对象,但是我遇到了一个问题,即保存了生成的xml。对象字段定义为xml,因此在linq到sql中它是一个xelement。我正在使用以下代码序列化并获取xml字符串。但是当我尝试将xml字符串加载到xelement时,我得到“路径中的非法字符”错误。但是,当我查看生成的xml时,我没有看到任何非法字符。这是生成的xml。

using (StringWriter sw = new StringWriter())
{
      var x = new XmlSerializer(sessionObject.ObjectToStore.GetType());
      x.Serialize(sw, sessionObject.ObjectToStore);
      sessionRecord.sessionObject = XElement.Load(sw.ToString());
}

<?xml version="1.0" encoding="utf-16"?>
<SerializableJobSearch xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Keywords>electronics</Keywords>
  <StateList />
  <Radius>50</Radius>
  <City />
  <State />
  <DisciplineIdList />
  <IndustryIdList />
  <Direct>false</Direct>
  <TempHire>false</TempHire>
  <Contract>false</Contract>
  <PerHour>false</PerHour>
  <PerYear>false</PerYear>
  <DegreeLevel />
  <IncludeJobsRequiringLess>false</IncludeJobsRequiringLess>
  <AddedWithin>0</AddedWithin>
  <OrderBy>Rank</OrderBy>
  <OrderByRank>true</OrderByRank>
  <resultsPerPage>50</resultsPerPage>
  <NeedToMake />
</SerializableJobSearch>