2011-02-14 96 views
0

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

回答

0

我认为这取决于对象被序列化的格式。例如,如果你序列化为xml,那么sql server(至少最新版本)支持xml类型。如果你确实序列化为二进制,那么坚持二进制可能没问题。选择与序列化类型相似的数据库类型可以最大限度地减少将数据库类型桥接到对象类型的转换。

+0

好点。我没有想到序列化的方法。我刚刚在课堂上看到了可序列化的属性,并认为我们很好。但是如果我没有记错的话,我必须为这样的情况制定一个特定的序列化方法,对吧? – 2011-02-14 22:23:36

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> 
相关问题