2016-03-10 4 views
1

Принято ли поведение, что официальная реализация MessagePack в Java сериализует публичные поля в виде массивов?MessagePack Java serializing as array

В какой вселенной это «как JSON»?

Мой случай: У меня есть простой класс, например, так:

@Message 
public class MySuperClass(){ 
    public int mySuperID; // let's say 4 
    public byte[] mySuperData; // let's say nothing 
    public String mySuperType; // let's say null 
    public String mySuperExtra; // let's say HI! 

    public MySuperClass(){} 

    // other constructors 
} 

И я просто сериализации с

MessagePack msgpack = new MessagePack(); 
msgpack.write(mySuperInstance); 

И посылая что к дальнему сервера, написанного в NodeJS.

Node JS может легко распаковать его,

['HI!', �, 4, null] 

Это означает, что MessagePack не что иное, как JSON, поскольку он анализирует Java объекты как массивы, а затем только повторно заполняет их в алфавитном порядке!

У кого-нибудь есть решение, которое не включает отображение каждого объекта, который у меня есть? (Также HashMap не распаковывается узлом, что означает, что messagePack не является межплатформенным, поэтому повторяется, отмечая, как JSON)

ответ

1

Судя по моему опыту MessagePack, он обычно рассматривает объекты как карты MessagePack.

Он не использует никаких специфических для языка конструкций, поэтому он является кросс-платформенным.

Возможно, у вас могут возникнуть проблемы из-за библиотеки, которую вы используете. Вы должны считать официальным. Вы можете узнать больше об этом here. В основном это расширение для Jackson, которое позволяет сериализовать и десериализовать объекты Java непосредственно в/из MessagePack и работать (по крайней мере, когда мне пришлось его использовать).

+0

Большое спасибо, я не рассматривал Jackson-msgpack. Однако я использовал msgpack-java, официальную реализацию. В любом случае, я оставил его для GSON, я теряю некоторое пространство, но получаю вовремя ^^ –