在序列化Flags long Enum时,protobuf-net会抛出System.Overflow异常。这是我正在做的事情的示意图:
正在序列化的类:
[ProtoContract()]
public class Entry
{
[ProtoMember(1)]
public FancyLongEnum FancyLongEnum {get;set;}
}
Enum:
[ProtoContract(ImplicitFields = ImplicitFields.AllFields, EnumPassthru = true)]
[Flags]
public enum FancyLongEnum : long
{
FirstFancyValue = 1,
[...]
LastFancyValue = 137438953472
}
结果:
System.OverflowException: Arithmetic operation resulted in an overflow.
解决方法是使用包装器long属性并在序列化期间忽略FancyLongEnum。但是,我希望有一种更清洁的方式。
在Error while using ProtoBuf-Net with flags enum中讨论了类似的问题。它导致了对protobuf-net的修复。
如何在不使用包装器属性的情况下直接进行序列化工作?