.Net Serialization,XmlDataReader,SQL数据库和FlagsAttribute!

时间:2010-01-21 23:06:19

标签: enums xmlreader flags xmlserializer

快速概述我的情况:

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

对于一些较小的数据类,我只是使用ExecuteNonQuery,Reader等与数据交互,因为它更容易,但我遇到了一个问题。

使用ExecuteNonQuery将数据插入到数据库中,使用参数 - 插入的一些数据是附加了FlagAttribute的Enums(存储在DB中作为int)的属性。在诸如以下的枚举上:

<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类型中。

有没有人对此有任何想法?

1 个答案:

答案 0 :(得分:0)

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