实例验证错误:不是Xml反序列化的有效值

时间:2012-06-11 15:41:38

标签: .net vb.net xml-serialization

我希望有人可以在这里指出我正确的方向,因为这个错误信息绝对没有意义。我有一个在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#库中。

谢谢

2 个答案:

答案 0 :(得分:0)

您应该发布其余的代码,因为有些代码丢失了。您的序列化XML引用“OptionType”作为字段,但枚举类型上没有更改其名称的XmlElement声明。

在代码中,在枚举为属性的类中查找更高。

答案 1 :(得分:0)

我认为XmlEnum属性决定了序列化目的的有效值。请尝试更改为以下内容:

<Xml.Serialization.XmlEnum("None")> None = 0