「いいえワイヤー値が列挙fooの位置16にマッピングされていない」
このエラーメッセージは何を意味するのでしょうか?
i。)ワイヤ値とは何ですか?
ii。)相対的な位置は?
追加情報:私は私の特定の状況で
ませワイヤ値があり、位置16
で列挙System.Drawing.ContentAlignment.0にマッピングされていません私が知っている整数0の列挙の表現はありません。エラーレポートの意味を知るだけで、この問題を解決する方法がわかります。
「いいえワイヤー値が列挙fooの位置16にマッピングされていない」
このエラーメッセージは何を意味するのでしょうか?
i。)ワイヤ値とは何ですか?
ii。)相対的な位置は?
追加情報:私は私の特定の状況で
ませワイヤ値があり、位置16
で列挙System.Drawing.ContentAlignment.0にマッピングされていません私が知っている整数0の列挙の表現はありません。エラーレポートの意味を知るだけで、この問題を解決する方法がわかります。
"ワイヤー値"は、 "ワイヤー上"で使用するバイナリー表現、つまり基本ストリーム内で使用されます。この場合、0
を使用しているということは、enumの値が0であることを意味しますが、は0を期待していませんでした。ほとんどの場合、0の値を持つenumメンバーが定義されていない可能性が高いです。それは、System.Drawing.ContentAlignment.0
ではなく、その名前を使用したでしょう。 protobuf-netは、値が意味をなさないことを強制する列挙規則を適用しようとしています(また、外部データを使ったいくつかのシナリオで、列挙値と配線値の間のマップを定義することもできます)。
これを避ける方法はいくつかあります問題:
Nullable<SomeEnum>
(SomeEnum?
) None
値、その値を表す場合int
(または任意の基本となるタイプがある)ようなタイプを公開「シム」プロパティを使用します。 public SomeEnum Foo {get;set;} // the actual member
[ProtoMember(42)]
private int FooSerialized { // only exists to help protobuf-net ignore the
get { return (int)Foo; }// invalid values that the member might contain
set { Foo = (SomeEnum)value; }
}
手動RuntimeTypeModel
経由でモデルを設定し、伝えますEnumPassthru
true
にを設定することにより、このメンバーに取り扱う列挙型を無視するようにいるProtobuf-netがいるProtobuf-netの有効
EnumPassThru
自動的
[Flags]
と列挙型の宣言を、マーク
"position 16"は、おそらく*出力バッファへのオフセットについて語っています。 *シリアライゼーション*のために、おそらくあなたよりも私を助けます。 *デシリアライズ*のために、それは消費者にとってより有用かもしれない –