2012-03-28 60 views
2

我希望能夠將任何C#對象保存在SQL數據庫表的單個列中。我不清楚如何將對象轉換爲varbinary或從varbinary中取回。我的SystemContextObjects表有一個Varbinary(max)的OptionValue列。使用Linq到SQL將C#對象與Varbinary進行轉換

var dc1 = new DataContextDataContext(); 
var optionUpdate = dc1.SystemContextObjects.SingleOrDefault(o => o.OptionId == OptionId && o.OptionKey == OptionKey); 
if (optionUpdate != null) 
{ 
    optionUpdate.OptionValue = Value; <===== NEED HELP HERE... 
    optionUpdate.DateCreated = DateTime.Now; 
    optionUpdate.PageName = PageName; 
    var ChangeSet = dc1.GetChangeSet(); 
    if (ChangeSet.Updates.Count > 0) 
    { 
     dc1.SubmitChanges(); 
     return; 
    } 
} 

回答

2

我使用JSON完成了這項工作。我將該類序列化爲/從一個字符串中反序列化並存儲它。工作正常。

+3

你可以發表你的解決方案,請 – CSharpNewBee 2013-07-04 17:21:04

5

你可以使用一個二進制串行器,例如,使用BinaryFormatter - 但是你的類必須是可序列化來標明,這裏一個簡單的例子:

你有一個簡單的Person類並將其標記爲可序列化:

[Serializable] 
public class Person 
{ 
    public string Name { get; set; } 
    public string Address { get; set; } 
} 

可以使用,然後將其序列化內存流中提取字節數組表示對象:

Person p = new Person() { Name = "Fred Fish", Address = "2 Some Place" }; 
using (MemoryStream ms = new MemoryStream()) 
{ 
    BinaryFormatter formatter = new BinaryFormatter(); 
    formatter.Serialize(ms, p); 

    ms.Position = 0; 
    byte[] personData = ms.ToArray(); // here's your data! 
} 

要使用的字節數組反序列化,其工作原理類似於重新創建一個Person對象

byte[] personData = ... 
using (MemoryStream ms = new MemoryStream(personData)) 
{ 
    BinaryFormatter formatter = new BinaryFormatter(); 
    Person p = (Person)formatter.Deserialize(ms); 
}