2014-01-27 4 views
0

У меня есть приложение, которое обменивается данными по методу TCP/IP и должно сериализовать некоторые данные на устройство.Как сериализовать массив объектов смешанного типа с помощью MessagePack в C#

В приложении, я хотел бы сериализовать массив объектов смешанного типа, который включает в себя строку, двойной массив и некоторое целое ..etc. Например, я хотел бы сериализовать данные, где:

Данные = [размер, mainmsg]; где size - int16, а mainmsg - строка.

Я посмотрел на следующей ссылке http://wiki.msgpack.org/display/MSGPACK/QuickStart+for+C+Sharp

Мне кажется, что BoxingPacker будет сгенерировано исключение при распакованы, если у меня есть строка в моем массиве объектов.

Я хотел бы спросить, если у меня есть массив объектов смешанного типа, [5, "D1"], что бы лучше всего сделать, чтобы сериализовать с помощью msgpack (в C#)? (Этот пакет предназначен, не может изменить по сравнению с другими методами сериализации)

Прямо сейчас, я использую BoxingPacker упаковать мое целое, и использовать ObjectPacker упаковать мою строку, например:

size = 1; 
msg = "D1" 

BoxingPacker intpacker = new BoxingPacker(); 
packedsize = intpacker.Pack(size); 

ObjectPacker packer = new ObjectPacker(); 
packedmsg = packer.Pack<String>(msg); 

Тогда Я объединил двоичные данные (packedsize + packingmsg) вместе с помощью Buffer.BlockCopy.

Я ищу, если есть простой способ сделать это? Может быть, я чего-то не хватает, но я не мог найти ничего документального, кроме ссылки, которую я вставил выше. Любые рекомендации приветствуются.

+0

Является ли дизайн вашего «массив объектов» гибкий, и все объекты, содержащиеся примитивными? – theMayer

+0

привет, @ rmayer06 да все объекты содержали примитив. Заранее благодарны за Вашу помощь. – user2386301

+0

Вы можете попробовать Буферы протоколов - разработаны, чтобы быть очень быстрыми и эффективными https://code.google.com/p/protobuf-net/ – theMayer

ответ

1

Вам просто нужно сериализовать массив объектов

size = 1; 
msg = "D1" 

object[] objs = new object[] { size, msg }; 

ObjectPacker packer = new ObjectPacker(); 
packedmsg = packer.Pack<object[]>(objs); 
Смежные вопросы