Как вычислить размер MessagePack .СЕТЕВОЙ объект?

#c# #msgpack

#c# #msgpack

Вопрос:

Если у меня есть класс без каких-либо объектов переменного размера (например, строк, списков и т. Д.), Есть ли в библиотеке MessagePack какая-либо служебная функция для вычисления размера двоичного представления объекта?

Пример класса:

 [MessagePackObject]
class Foo {
  [Key(0)]
  public int A { get; set; }
  [Key(1)]
  public float B { get; set; }
}
 

В настоящее время лучше всего просто сериализовать объект и измерить его длину.

Ответ №1:

Передайте конечный объект вспомогательному методу, чтобы получить используемые байты, т.е.;

 var obj = new Foo { A = 1, B = 2};
var bytes = Foo.ToMessagePack();
Debug.WriteLine($"size in bytes is {bytes.Length}");
 

И метод расширения;

 public static class Helpers
{
    public static byte[] ToMessagePack<T>(this T data) => MessagePackSerializer.Serialize(data);
}
 

Комментарии:

1. Да, это мой текущий лучший выбор 🙂