Как использовать MessagePack в C#?


Я прочитал документацию msgpack-cli quick start.

Я также получил пакет NuGet C# (CLI) (v0.3).

Ни один из классов (например BoxingPacker, CompiledPacker или ObjectPacker), упомянутые в официальной документации, существуют в пакете NuGet (!!). Я предполагаю, что документы осиротели.

Итак, есть ли у кого-нибудь примеры того, как сериализовать/десериализовать в/из MessagePack в C#? Я пытаюсь сделать это для объекта и интересуюсь бинарной природой объекта. сериализатор.

5 3

5 ответов:

Для будущих читателей: я бы с Авро или кодировке или даже бережливость за MessagePack основе результаты ...

Для конкретного вопроса ключевыми частями являются:

public byte[] Serialize<T>(T thisObj)
{
    var serializer = MessagePackSerializer.Create<T>();

    using (var byteStream = new MemoryStream())
    {
        serializer.Pack(byteStream, thisObj);
        return byteStream.ToArray();
    }
}

public T Deserialize<T>(byte[] bytes)
{
    var serializer = MessagePackSerializer.Create<T>();
    using (var byteStream = new MemoryStream(bytes))
    {
        return serializer.Unpack(byteStream);
    }
}

Весь НИОКР тип проекта, с результатами-в https://github.com/sidshetye/SerializersCompare и конкретные вызовы функций Здесь.

Я нахожу пример в: http://www.irisclasson.com/2012/12/17/serializing-and-deserializing-packingunpacking-to-a-file-andor-memorystream-with-messagepack-in-c/ Я тестирую его в своем коде и посылаю данные Byte[] на другой хост с помощью zmq. Это работает.

Я удивлен, никто не понял, о чем спрашивал пользователь. Существует так много пакетов nuget для msgpack, и это действительно сбивает с толку, какой из них использовать и как включать в проекты. Я предполагаю, что пользователь хотел знать, как включить msgpack в проект .net, как и я.

Install MessagePack for CLI from Nuget packages

А затем включить вот так

using MsgPack.Serialization;

В последних версиях msgpack-cli Метод Create, как и в MessagePackSerializer.Create<T>();, помечен как устаревший.

Пример использования, приведенный на странице проекта github может быть:

// Creates serializer.
var serializer = SerializationContext.Default.GetSerializer<T>();
// Pack obj to stream.
serializer.Pack(stream, obj);
// Unpack from stream.
var unpackedObject = serializer.Unpack(stream);

Установите пакет MsgPack из NuGet. Смотрите рисунок здесь:

Введите описание изображения здесь