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

Я прочитал документацию по быстрому запуску msgpack-cli.

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

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

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

5 ответов

Решение

Для будущих читателей: я бы выбрал Avro или Protocol Buffers или даже Thrift over 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);
    }
}

Весь проект типа R&D с результатами находится по адресу https://github.com/sidshetye/SerializersCompare а конкретные вызовы функций здесь.

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

Install MessagePack for CLI from Nuget packages

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

using MsgPack.Serialization;

В последних версиях msgpack-cliCreateметод как в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. Смотрите картинку здесь:

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

Другие вопросы по тегам