Преобразование объекта C# в Varbinary и из него с помощью Linq в SQL

Я хочу иметь возможность сохранить любой объект 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;
    }
}

2 ответа

Решение

Я использовал JSON для достижения этой цели. Я сериализую / десериализирую класс в / из строки и сохраняю это. Работает отлично.

Вы можете использовать двоичный сериализатор для этого, например, используя 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);
}
Другие вопросы по тегам