Open zlp821130 opened 5 months ago
java 端的两个实体 @Message public class RESP_GHM implements Serializable {
int uiYear; // 年
char[] szMs = new char[3]; // 毫秒
public int getUiYear() {
return uiYear;
}
public void setUiYear(int uiYear) {
this.uiYear = uiYear;
}
public char[] getSzMs() {
return szMs;
}
public void setSzMs(char[] szMs) {
this.szMs = szMs;
}
}
@Message public class RequestBody implements Serializable {
/**
* id
*/
private int id;
/**
* msg
*/
private String msg;
private ArrayList<Short> usCmdWork;
private ArrayList<String> usTestString;
private Short[][] usWave = new Short[3][4];
private RESP_GHM ghm;
public RequestBody() {
}
public RequestBody(int id, String msg) {
this.id = id;
this.msg = msg;
}
/**
* Getter method for property <tt>id</tt>.
*
* @return property value of id
*/
public int getId() {
return id;
}
/**
* Setter method for property <tt>id</tt>.
*
* @param id value to be assigned to property id
*/
public void setId(int id) {
this.id = id;
}
/**
* Getter method for property <tt>msg</tt>.
*
* @return property value of msg
*/
public String getMsg() {
return msg;
}
/**
* Setter method for property <tt>msg</tt>.
*
* @param msg value to be assigned to property msg
*/
public void setMsg(String msg) {
this.msg = msg;
}
public ArrayList<Short> getUsCmdWork() {
return usCmdWork;
}
public void setUsCmdWork(ArrayList<Short> usCmdWork) {
this.usCmdWork = usCmdWork;
}
public ArrayList<String> getUsTestString() {
return usTestString;
}
public void setUsTestString(ArrayList<String> usTestString) {
this.usTestString = usTestString;
}
public Short[][] getUsWave() {
return usWave;
}
public void setUsWave(Short[][] usWave) {
this.usWave = usWave;
}
public RESP_GHM getGhm() {
return ghm;
}
public void setGhm(RESP_GHM ghm) {
this.ghm = ghm;
}
}
@zlp821130 You're using msgpack-java v6? If so, it's not supported now, unfortunately.
我在C++端序列化nested struct RequestBody,并发送到Java端反序列化 C++结构体和序列化方法如下: struct RESP_GHM { int uiYear; // 年 char szMs[3]; // 毫秒
};
/*
@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) {
};
Java端反序列化代码如下
// java反序列化代码 public T deserialize(byte[] data, String classOfT) throws CodecException {
执行到resultObject = messagePack.read(data, clazz); //throw “Expected array, but got raw value”。
注: 如果RequestBody中不嵌套RESP_GHM 结构体,Java端能够正常反序列化,msgpack是否支持嵌套结构体的序列化和反序列化?