Es gibt zwei verschiedene Dinge, die wir hier betrachten müssen; Das erste ist: Solange Sie einen Wert ungleich Null zuweisen, sollte dieser für die meisten Werte bereits funktionieren. Die Tatsache, dass Sie Null sehen, sagt mir, dass Sie wahrscheinlich entweder gar keinen Wert zuweisen (der Standardwert für eine Aufzählung ist Null, auch wenn Sie nichts mit Null definieren ) oder Sie verwenden ein zurückspulbarer Strom, der jedoch nicht zurückgespult wurde; das funktioniert am 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
Jedoch gibt es ein Problem mit einer größeren Anzahl, wie protobuf definiert enums 32 Bit zu sein. Die v3-Codebasis umgeht dies. In der v3-Vorschau funktioniert derselbe Code auch b
einwandfrei. In v2 ist Ihr Wert von b
derzeit jedoch zu groß und führt zu einem arithmetischen Überlauf. In diesem Szenario würde ich dies mit einer Schatteneigenschaft angehen:
public xyz name;
[ProtoMember(1)]
private ulong NameSerialized
{
get => (ulong)name;
set => name = (xyz)value;
}
Dies funktioniert entweder in Version 2 oder Version 3.