回答:
ここでは、2つの異なる点に注意する必要があります。1つ目は、ゼロ以外の値を割り当てている限り、ほとんどの値ですでに機能しているはずです。ゼロが表示されているという事実は、おそらく最初に値を割り当てていないか(ゼロで何も定義していなくても、列挙型のデフォルト値はゼロである)、または巻き戻し可能なストリームですが、巻き戻されていません。これは2.4.4で機能します。
var obj = new ABC { name = xyz.a };
var ms = new MemoryStream();
Serializer.Serialize(ms, obj);
ms.Position = 0; // rewind
var clone = Serializer.Deserialize<ABC>(ms);
Console.WriteLine(clone.name); // a
ただし、protobuf は列挙型を32ビットとして定義しているため、数値が大きくなると問題が発生します。v3コードベースはこの問題を回避するため、v3プレビューでは同じコードでb
も問題なく機能しますが、v2ではb
現在の値が大きすぎて、算術オーバーフローが発生します。このシナリオでは、私がこれに取り組む方法は、シャドウプロパティを使用することです。
public xyz name;
[ProtoMember(1)]
private ulong NameSerialized
{
get => (ulong)name;
set => name = (xyz)value;
}
これはv2またはv3のいずれでも機能します。