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