我希望有人可以在这里指出我正确的方向,因为这个错误信息绝对没有意义。我有一个在VB.NET库中声明如下的枚举值。
<Serializable()> Public Enum OptionDataType
<Xml.Serialization.XmlEnum("0")> None = 0
<Xml.Serialization.XmlEnum("1")> Option1 = 1
<Xml.Serialization.XmlEnum("2")> Option2 = 2
<Xml.Serialization.XmlEnum("3")> Option3 = 3
<Xml.Serialization.XmlEnum("4")> Option4 = 4
<Xml.Serialization.XmlEnum("5")> Option5 = 5
Option6 = 6
End Enum
当我尝试反序列化此对象的XML表示时,我收到一条错误消息:
"Instance validation error: 'None' is not a valid value for OptionDataType."
如上所示,“无”显然是有效值。更令人沮丧的是,这个错误只会出现在某些XML文件中。以相同方式序列化并具有“无”值的其他文件将反序列化而没有任何问题。我已经将一个工作文件与无数次抛出错误的文件进行了比较,并且XML结构完全相同。
以下是序列化XML的摘录。
<Key>0</Key>
<OptionType>None</OptionType>
<TypeId>0</TypeId>
我怀疑存在更深层次的问题,但CLR正在抛出一个谎言错误而不是有用的东西。有人能指出我正确的方向,找出实际问题是什么,或者这是否是一个有效的错误,向我解释为什么和什么是错的?此外,对于它的价值,反序列化发生在C#库中。
谢谢
答案 0 :(得分:0)
您应该发布其余的代码,因为有些代码丢失了。您的序列化XML引用“OptionType”作为字段,但枚举类型上没有更改其名称的XmlElement声明。
在代码中,在枚举为属性的类中查找更高。
答案 1 :(得分:0)
我认为XmlEnum属性决定了序列化目的的有效值。请尝试更改为以下内容:
<Xml.Serialization.XmlEnum("None")> None = 0