シリアル化する [ProtoMember] 属性で装飾するフラグ付きの列挙型がありますそしてデシリアライズWin7 x64 を実行しているローカル ボックスでは問題ありません。
ただし、私のユース ケースには、Windows Server 2008 R2 Enterprise 64 ビットを実行しているサーバーでのシリアル化と、ローカル ボックスでの逆シリアル化が含まれます。逆シリアル化すると、「オーバーフロー例外が処理されませんでした。算術演算でオーバーフローが発生しました」という例外が発生します。ProtoBuf.Serializers.CompiledSerializer.ProtoBuf.Serializers.IProtoSerializer.Read(オブジェクト値、ProtoReaderソース)からスローされるようです。
enum を int に変更してシリアライズしてみましたサーバー上/ローカルでのデシリアライズが機能します。int の代わりに enum を使用したいと思います。私は何を間違っていますか?
これが適切な情報かどうかはわかりませんが、サーバーで実行する実行可能ファイルはローカル ボックスでビルドされています。
列挙は、参照された外部 dll からのものです。私のソリューションで列挙型コードを複製すると、逆シリアル化が機能します。例外がスローされるのは、外部 dll (ソース コードが不明であると思われる場所) から列挙型を使用していて、列挙型の値が 128 より大きい (と思われる) 場合のみです。私の場合、Status.Zeta と Status.すべてが例外をスローしました。適切に逆シリアル化された他の列挙値。列挙型は次のように定義されます。
[Flags]
public enum Status
{
None = 0,
Alpha = 1,
Beta = 8,
Gamma = 16,
Delta = 32,
Epsilon = 64,
Zeta = 132,
All = 255,
}
dll のコードを変更できません。どうすればこれを機能させることができますか?.proto ファイルは必要ですか? 可能であればこれを回避しようとしています。