快速概述我的情况:
我正在开发一个非常依赖序列化的 N 层应用程序,对象主要以序列化方式与数据库交互,对象和集合作为 XML 从存储过程中插入、更新和读取。
对于一些较小的数据类,我只是使用 ExecuteNonQuery、Reader 等与数据交互,因为它更容易,但我遇到了一个问题。
使用 ExecuteNonQuery 将数据插入到数据库中,使用参数 - 插入的一些数据是附加了 FlagAttribute 的枚举属性(作为整数存储在数据库中)。在枚举上,例如:
<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,导致'Instance validation error:'7' is not a valid value for Fruit',因为它期望它以以下格式序列化:
<fruitOptions>1 2 4<fruitOptions>
总而言之,这有点令人困惑,我可以通过将其以 1、2、4 格式存储在数据库中来解决它,但遗憾的是,它不是当前所在的 int 类型。
有人对此有任何想法吗?