【问题标题】:How to Fix Enum Error in ProtoBuf-Net如何修复 ProtoBuf-Net 中的枚举错误
【发布时间】:2012-10-28 11:06:34
【问题描述】:

我在尝试序列化时收到此错误。

这个问题的答案:

How to map System Enum's in Protobuf.Net

表示这与Flags Enum 相关,应该在V2 中处理。这里报告的 Enum 不是Flags Enum:

public enum RunwayDesignator {
    NONE = 0,
    LEFT = 1,
    RIGHT = 2,
    CENTER = 3,
    WATER = 4,
    C = 5,
    L = 6,
    R = 7,
    W = 8,
    A = 9,
    B = 10,
    NOT_APP = 99
}

我假设“16”指的是枚举中的某些东西,尽管没有 16 个值。我还检查了是否有任何 16 的 ProtoMember ID 与此枚举的 unsages 相关 - 没有。此枚举的所有被序列化的用法都是私有字段。

我希望能提供一些有关如何处理此问题的指导。

谢谢

【问题讨论】:

    标签: c# serialization protobuf-net


    【解决方案1】:

    嗯 - 这很尴尬。问题是确实生成了 16 的值。所以看起来这是我的某种编程错误。错误消息说枚举中没有 16 的值,这是真的。

    所以我现在可以回去尝试修复我的代码。 Protobuf-Net 没有任何问题。

    我想这可能对看到此错误的其他人有用。找出枚举值的使用位置,并查看代码是否发送了无效值。我不明白为什么在尝试为枚举设置无效索引时没有看到某种运行时错误。我现在需要调查一下。这是一个答案

    Why does casting int to invalid enum value NOT throw exception?

    似乎没有为无效枚举值生成错误,但 protobuf-net 确实找到了它们

    【讨论】:

    • C# 中未检查枚举 - 任何有效的整数(等)都可以。 Protobuf-net 默认验证,但可以配置为不勾选直接通过
    • @Marc。我非常感谢 Protobuf-net 确实验证了。它正在成为我调试工具包的一个很好的补充。这一切都是因为我在重构一些代码时引入的一个愚蠢的错误。如果没有验证,我很确定我会很难找到它!再次感谢这么好的工具和这么好的支持。
    猜你喜欢
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多