1

シリアル化しようとすると、このエラーが発生します。

シリアライズ時のエラーメッセージ

この質問への答え:

Protobuf.Net で System Enum をマップする方法

これが Enum に関連しておりFlags、V2 で処理する必要があることを示します。ここで報告されている Enum は Enum ではありませんFlags

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」は列挙型の何かを指していると思います。この列挙型の unsage に関連する 16 の ProtoMember ID があるかどうかも確認しましたが、ありません。シリアル化されたこの列挙型のすべての使用は、プライベート フィールドです。

これに対処する方法についていくつかのガイダンスをいただければ幸いです。

マントありがとう

4

1 に答える 1

1

まあ、これは恥ずかしいです。問題は、値 16 が実際に生成されていることです。したがって、これは私のプログラミング エラーのようなものです。エラー メッセージは、列挙型に 16 の値がないことを示しており、それは本当です。

これで、戻ってコードを修正することができます。Protobuf-Net に過失はありません。

これは、このエラーが表示されている他の人にとって役立つと思います。列挙値が使用されている場所を見つけ、コードが無効な値を送信しているかどうかを確認します。私が理解していないのは、列挙型に無効なインデックスを設定しようとしたときに、何らかの実行時エラーが表示されない理由です。私は今それを調査する必要があります。そして、ここにそれに対する答えがあります

int を無効な列挙値にキャストしても例外がスローされないのはなぜですか?

無効な列挙値に対して生成されたエラーはないようですが、protobuf-net はそれらを見つけます

于 2012-10-28T12:13:52.850 に答える