3

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

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;
    }
}
4

2 に答える 2

8

-を使用するなど、これにはバイナリシリアライザーを使用できます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);
}
于 2012-03-28T00:20:34.307 に答える
2

私はこれを達成するためにJSONを使用することになりました。クラスを文字列との間でシリアル化/逆シリアル化し、それを格納します。正常に動作します。

于 2012-03-28T21:04:24.397 に答える