Как использовать MessagePack в C#?
Я прочитал документацию msgpack-cli quick start.
Я также получил пакет NuGet C# (CLI) (v0.3).
Ни один из классов (например BoxingPacker
, CompiledPacker
или ObjectPacker
), упомянутые в официальной документации, существуют в пакете NuGet (!!). Я предполагаю, что документы осиротели.
Итак, есть ли у кого-нибудь примеры того, как сериализовать/десериализовать в/из MessagePack в C#? Я пытаюсь сделать это для объекта и интересуюсь бинарной природой объекта. сериализатор.
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);