Há duas coisas diferentes que precisamos examinar aqui; a primeira é: desde que você esteja atribuindo um valor diferente de zero, para a maioria dos valores ele já deve funcionar; o fato de você estar vendo zero me diz que provavelmente não está atribuindo um valor em primeiro lugar (o valor padrão de uma enumeração é zero, mesmo que você não defina nada com zero), ou está usando um fluxo rebobinável, mas não rebobinado; isso funciona na 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
No entanto, há um problema com números maiores, pois o protobuf define as enumerações para serem de 32 bits. A base de código da v3 funciona em torno disso, portanto, nas visualizações da v3, o mesmo código também funcionará bem b
, mas na v2 o valor de b
atualmente é muito grande e causa um estouro aritmético. Nesse cenário, a maneira como eu abordaria isso é com uma propriedade shadow:
public xyz name;
[ProtoMember(1)]
private ulong NameSerialized
{
get => (ulong)name;
set => name = (xyz)value;
}
Isso funcionará na v2 ou v3.