Enums .Net序列化、XmlDataReader、SQL数据库和FlagsAttribute!

Enums .Net序列化、XmlDataReader、SQL数据库和FlagsAttribute!,enums,xmlreader,flags,xmlserializer,Enums,Xmlreader,Flags,Xmlserializer,快速概述我的情况: 我正在开发一个N层应用程序,它非常依赖于序列化,对象主要以序列化方式与数据库交互,对象和集合作为XML从存储过程中插入、更新和读取 对于一些较小的数据类,我只是简单地使用ExecuteOnQuery、Reader等与数据进行交互,因为这样比较容易,但我遇到了一个问题 使用参数,使用ExecuteOnQuery将数据插入到数据库中-插入的某些数据是附加了FlagAttribute的枚举属性(作为ints存储在DB中)。在枚举上,例如: <Flags()> _ Pub

快速概述我的情况:

我正在开发一个N层应用程序,它非常依赖于序列化,对象主要以序列化方式与数据库交互,对象和集合作为XML从存储过程中插入、更新和读取

对于一些较小的数据类,我只是简单地使用ExecuteOnQuery、Reader等与数据进行交互,因为这样比较容易,但我遇到了一个问题

使用参数,使用ExecuteOnQuery将数据插入到数据库中-插入的某些数据是附加了FlagAttribute的枚举属性(作为ints存储在DB中)。在枚举上,例如:

<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
_
公共枚举结果为整数
无=0
苹果=1
香蕉=2
橙色=4
结束枚举
读回的值可能是1、3、7等的整数值,并在不使用序列化的情况下插入到数据库中,但当它作为使用ExecuteXmlReader(填充XmlReader对象)的更大类组的一部分读回,然后需要反序列化时,它不能是,例如7,原因“实例验证错误:'7'不是FROUT的有效值”,因为它希望将其序列化为以下格式:

<fruitOptions>1 2 4<fruitOptions>
1 2 4
总而言之,这有点令人困惑,我可能可以通过以1、2、4格式将其存储在数据库中来解决它,但遗憾的是,它不是当前使用的int类型


有人对此有什么想法吗?

您必须询问DBA或您正在使用的存储过程的作者。似乎他们已经指定此字段不是枚举,而是列表。

数据以int形式存储在数据库中,因为我们希望可以对其执行位操作。问题是,当它被反序列化时,它希望得到上面示例中的结果,即果节点,因此无法将其序列化回来。它可以作为一个数字字符串存储在数据库中,如上所示,但是我们不能对它进行任何按位操作,还不如使用另一种数据类型(如XML)来帮助查询数据?尽管我更愿意将数据作为int类型保存在数据库中,但你知道我如何做到这一点并仍然使用序列化吗?@Nathan你找到解决这个问题的方法了吗?