protobuf-net を使用しようとしていますが、カスタム RuntimeTypeModel で無効にした UseImplicitZeroDefaults を理解するのに問題があります。最初はデフォルトの RuntimeTypeModel を使用していましたが、DefaultValue が指定されていてもブール型のプロパティが複製されていないことに気付きました。
UseImplicitZeroDefaults を false に設定できるようにするカスタム RuntimeTypeModel を作成することで、これを解決しました。ただし、これを false に設定すると、次のエラーが発生します。
ProtoBuf.ProtoException: No wire-value is mapped to the enum
一部の列挙型はゼロベースではないことに注意してください。これが問題を引き起こしている可能性はありますか? ブール値のプロパティと列挙型 (非ゼロとゼロベースの混合) を複製/シリアル化するにはどうすればよいですか?
編集: protobuf-net enum serializationで見つかった情報の一部を使用し、以下を報告できます:
[ProtoMember(10), DefaultValue(SiteType.Partition)]
public SiteType Type { get; set; }
それでも「No wire-value」エラーが発生します。
[ProtoMember(10, IsRequired = true)]
public SiteType Type { get; set; }
それでも「No wire-value」エラーが発生します。
public enum SiteType
{
Error = 0,
...
これは機能しますが、理想的には、列挙型をクリーンなままにしたいと考えています。
おそらく、デフォルト値を指定するよりクリーンな方法は次のとおりです。
[DefaultValue(SiteType.Server)]
public enum SiteType
{
Server = 1,
Monkey = 2
...