Давать краткий обзор моей ситуации:. Чистая сериализация, XmlDataReader, база данных SQL и атрибут FlagsAttribute!
Я работаю над приложением N-Tier, опирающимся много на сериализации, объекты взаимодействуют с базой данных, главным образом, в упорядоченных модах, объекты и коллекции вставляются, обновляются и читать как XML из хранимых процедур.
Для некоторых небольших классов данных я просто использую ExecuteNonQuery, Reader и т. Д. Для взаимодействия с данными, так как это проще, но я столкнулся с проблемой.
Данные вставляются в базу данных с помощью ExecuteNonQuery, используя Parameters - некоторые из вставленных данных являются свойствами, которые являются Enums (хранятся в DB как int), к которым прикреплен FlagAttribute. Об одном Enum, такие как:
<Flags()> _
Public Enum Fruit As Integer
<Description("None"), XmlEnum("0")> None = 0
<Description("Apple"), XmlEnum("1")> Apple = 1
<Description("Banana"), XmlEnum("2")> Banana = 2
<Description("Orange"), XmlEnum("4")> Orange = 4
End Enum
Значение считаны может быть Целочисленное значение 1, 3, 7 и т.д., и вставлены в базу данных, не используя сериализации, когда она считывается обратно, однако как часть более крупную группу классов с использованием ExecuteXmlReader (заполнение объекта XmlReader), а затем ее нужно десериализовать, ее не может быть, поскольку, например, 7 вызывает «Ошибка проверки экземпляра:« 7 »не является допустимым значением для Fruit ', поскольку ожидает его сериализовать в формате:
<fruitOptions>1 2 4<fruitOptions>
все в целом это немного сбивает с толку, и я мог бы работать вокруг него, сохраняя его в базе данных в 1, 2 , 4, но, к сожалению, нет в типе int, в котором он находится.
У кого-нибудь есть идеи по этому поводу?
Данные хранятся в БД как int, поскольку мы надеялись, что тогда мы сможем побитовые операции над ним. Проблема заключается в том, что она десериализована, она ожидает результат, как в приведенном выше примере, узлы фруктов - и, следовательно, не может его сериализовать. Он может быть сохранен в БД как строка чисел, как показано выше, но тогда мы не могли выполнять побитовые операции на нем и могли бы также использовать другой тип данных, например XML, чтобы помочь в запросе данных? Хотя я предпочитаю хранить данные в БД как тип int, любая идея, как я могу это сделать и по-прежнему использовать сериализацию? – Nathan
@ Натан, вы когда-нибудь находили решение этой проблемы? – shadowf