Используя protobuf-net, возможно ли использовать зигзагообразную кодировку для отрицательных целых чисел?
При попытке сериализации свойств объекта, имеющих отрицательные значения, protobuf-net возвращается к кодированию fixed32 / fixed64 вместо эффективной кодировки Zigzag.
* 1005 Е.Г. *
[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 для отрицательных чисел отрицательно сказывается на отличном сжатии проводов.
Пожалуйста, помогите!
С уважением,
Mike