4

我希望有人能在这里指出我正确的方向,因为这个错误消息完全没有意义。我在 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# 库中。

谢谢

4

2 回答 2

0

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

在您的代码中往上看,在将枚举作为属性的类中。

于 2013-05-02T03:07:05.877 回答
0

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

<Xml.Serialization.XmlEnum("None")> None = 0
于 2015-07-21T04:51:21.773 回答