Используя protobuf-net, можно ли использовать кодировку Zigzag для отрицательных целых чисел?
При попытке сериализовать свойства объекта, которые имеют отрицательные значения, protobuf-net возвращается к кодировке fixed32/fixed64 вместо эффективной кодировки Zigzag.
E.g.
[ProtoContract]
internal class TestPoint
{
[ProtoMember(1)]
internal long Value;
}
var p = new TestPoint() { Value = -150 };
Сериализируется до 11 байт.
var p = new TestPoint() { Value = 150 };
Сериализируется до 3 байт.
Из ProtoWriter.cs:
case WireType.Variant:
if (value >= 0)
{
WriteUInt64Variant((ulong)value, writer);
writer.wireType = WireType.None;
}
else
{
DemandSpace(10, writer);
...
Есть ли способ украсить член в сериализованном классе, чтобы использовать WireType.SignedVariant? Не удалось найти способ сделать это в исходном коде.
В противном случае использование protobuf для отрицательных чисел сведет на нет цель превосходного сжатия проводов.
Пожалуйста помогите!
С уважением, Майк