2011-02-14 56 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> 
相關問題