2012-03-28 7 views
2

SQLデータベーステーブルの単一の列に任意のC#オブジェクトを保存できるようにします。オブジェクトをvarbinaryに変換する方法や、varbinaryから戻す方法は明確ではありません。私のSystemContextObjectsテーブルにはVarbinary(max)のOptionValueカラムがあります。LinqからSQLを使用してVarbinaryに変換するC#オブジェクト

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

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); 
} 
関連する問題