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