【问题标题】:Convert C# Object to and from Varbinary using Linq to SQL使用 Linq to SQL 将 C# 对象与 Varbinary 相互转换
【发布时间】:2012-03-28 00:03:45
【问题描述】:

我希望能够将任何 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;
    }
}

【问题讨论】:

    标签: c# .net sql varbinarymax


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我最终使用 JSON 来完成此任务。我将类序列化/反序列化到字符串/从字符串中存储它。工作正常。

      【讨论】:

      • 你能发布你的解决方案吗
      猜你喜欢
      • 1970-01-01
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多