Open
Description
我在C++端序列化nested struct RequestBody,并发送到Java端反序列化
C++结构体和序列化方法如下:
struct RESP_GHM {
int uiYear; // 年
char szMs[3]; // 毫秒
MSGPACK_DEFINE(uiYear, szMs); // 定义要序列化的成员
};
/*
-
@brief 测试消息体结构体
*/
struct RequestBody
{
int id;
string msg;
vector usCmdWork;
vector usTestString;
short usWave[3][4];
RESP_GHM ghm;MSGPACK_DEFINE(id, msg, usCmdWork, usTestString, usWave, ghm); // 定义要序列化的成员
};
// 序列化方法
template
string MsgpackSerialize(const T& obj) {
stringstream buffer;
// 序列化数据
pack(buffer, obj);
buffer.seekg(0);
string bufferStr(buffer.str());
return bufferStr;
};
Java端反序列化代码如下
// java反序列化代码
public T deserialize(byte[] data, String classOfT) throws CodecException {
Object resultObject = null;
MessagePack messagePack = new MessagePack();
try {
Class<?> clazz = Class.forName(classOfT);
resultObject = messagePack.read(data, clazz);
} catch (ClassNotFoundException e) {
throw new CodecException(
classOfT + " ClassNotFoundException occurred when Msgpack serializer decode!", e);
} catch (IOException e) {
throw new CodecException("IOException occurred when Msgpack serializer decode!", e);
}
return (T) resultObject;
}
执行到resultObject = messagePack.read(data, clazz); //throw “Expected array, but got raw value”。
注: 如果RequestBody中不嵌套RESP_GHM 结构体,Java端能够正常反序列化,msgpack是否支持嵌套结构体的序列化和反序列化?
Metadata
Metadata
Assignees
Labels
No labels