使用Linq到SQL将C#对象转换为Varbinary和从Varbinary转换C#对象

本文关键字:转换 Varbinary 对象 Linq 和从 使用 SQL | 更新日期: 2023-09-27 18:29:23

我希望能够将任何C#对象保存在SQL数据库表的单列中。我不清楚如何将对象转换为varbinary或从varbinary中取回它。我的SystemContextObjects表有一个OptionValue列,它是Varbinary(max)。

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

使用Linq到SQL将C#对象转换为Varbinary和从Varbinary转换C#对象

您可以为此使用二进制序列化程序,例如使用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);
}

我最终使用JSON来实现这一点。我将类序列化到字符串/从字符串反序列化并存储它。工作良好。