Сериализировать класс C# непосредственно к SQL-серверу?

Я смещаюсь к Flex, так как я делал разработку Flash/Flex с 2000. Я думаю для ответа на вопрос, хотя, он действительно сводится к уровню интерактивности и сложности, Вы хотите достигнуть.

Flex собирается позволить Вам сделать вещи, которые были бы почти невозможны в среде JavaScript (Ajax ASP.NET, jQuery, GWT), такой как простая 3-я графика. Создание сложной интерактивности действительно тривиально в Flex. Также это очень быстро и может обработать много анимированных объектов за один раз. Flex может связаться беспрепятственно с.NET или Java с помощью веб-сервисов. Оборотная сторона использования Flex - то, что похоже на встраиваемое приложение на Вашем веб-сайте, а не чем-то, что тесно интегрируется.

, Если бы Вы собираетесь придерживаться подхода JavaScript, обычно я предложил бы использовать что-то агностик языка как jQuery. Но так как у Вас уже есть опыт GWT, который может работать хорошо на Ваш проект. Оборотная сторона - то, что GWT в конце является все еще JavaScript, таким образом, Вы собираетесь быть ограниченными скоростью и интерактивностью того, что возможно в браузере.

22
задан Eric Schoonover 31 July 2009 в 13:41
поделиться

5 ответов

Вы можете xml сериализовать класс в поле xml. Мы все время используем это для регистрации исключений в ETL.

Используя XmlSerializer, вам может понадобиться вспомогательный метод где-нибудь, который сериализует класс в строку ...

public static string SerializeToXml<T>(T value)
{
    StringWriter writer = new StringWriter(CultureInfo.InvariantCulture);
    XmlSerializer serializer = new XmlSerializer(typeof(T));
    serializer.Serialize(writer, value);
    return writer.ToString();
}

Затем просто поместите строку в базу данных, как любой другой .

36
ответ дан 29 November 2019 в 03:51
поделиться

Я сериализовал объекты как XML и без проблем поместил их в базу данных. Поскольку мы знали максимальный объем текста, мы использовали тип данных varchar (max) вместо того, чтобы переходить в форматы TEXT или Binary.

Это было веб-приложение OLTP, и мы обнаружили, что использование столбца с типом данных xml вызывает некоторые значительное использование процессора, так как xml проверялся при каждой вставке. В нашем случае xml никогда не запрашивался ни о чем, поэтому отсутствие возможностей xml-запросов сработало для нас.

1
ответ дан 29 November 2019 в 03:51
поделиться

Наилучший способ хранить данные в базе данных - в столбцах (для каждого свойства), чтобы их можно было запрашивать и индексировать. В этом помогут инструменты ORM.

Однако также возможно сериализовать класс как CLOB / BLOB ( varchar (max) / varbinary (max) и т. Д.

Это то, что вы хотите, избегайте всего, что связано с реализацией или нетерпимостью к версии; поэтому, в частности, не используйте BinaryFormatter . Все, что основано на контракте, должно работать; XmlSerializer , DataContractSerializer и т. Д. Или для быстрых двоичных файлов, возможно, стоит взглянуть на protobuf-net.

Но я подчеркиваю; столбцы были бы лучше.

20
ответ дан 29 November 2019 в 03:51
поделиться

Ознакомьтесь с Linq-to-SQL ( вопросы по SO , ресурс в MSDN ) или другие параметры ИЛИ сопоставления .

0
ответ дан 29 November 2019 в 03:51
поделиться

Есть несколько вариантов:

Сериализация во время выполнения, сериализуемые объекты помечены значком Атрибут Serializable, и в этом случае класс IFormatter выполняет всю работу по сериализация. Сериализуемый объект может быть ISerializable, но тогда вы будете необходимо реализовать метод GetObjectData (). Проблема с сериализацией во время выполнения заключается в том, что программа, читающая XML-данные, должна иметь знание типов CLR.

Xml-сериализация: Отключите сериализацию во время выполнения, в этом случае вы получите хорошую совместимость. Тип XmlSerializer содержит методы Serialize () и Deserialize (), поэтому любой объект может быть сериализован в XML и сохранен в базе данных, и когда вы получите его обратно, вы может легко десериализовать его.

Для чтения данных из базы данных вы можете использовать класс SqlCommand метод, выполняющий SQL-запросы, а именно ExecuteXmlReader (). ExecuteXmlReader () возвращает экземпляр XmlReader, который будет читать ваши XML-данные.

0
ответ дан 29 November 2019 в 03:51
поделиться