我做了一个可以序列化设置并返回包含序列化数据的char *的函数。
首先,我将所有值打包到StaticJsonDocument
中,然后使用measureJson
确定输出字符串的大小,然后为输出char out[strsize]
分配空间,然后将数据序列化为空间已分配serializeJson(doc,out,strsize)
问题是输出字符串由于未知原因而为空。
我检查过的事情:
- Json文档结构正确,实际上包含配置设置
-
measureJson()
函数正确返回输出的大小并正在分配空间,strsize
不为0
代码:
char* configSerialize(bool msgpack){
StaticJsonDocument<settsize> doc;
JsonArray ipk = doc.createnestedArray("ip");
JsonArray gateipk = doc.createnestedArray("gateip");
JsonArray dnsk = doc.createnestedArray("dns");
JsonArray mack = doc.createnestedArray("mac");
unsigned char i;
for(i=0;i<4;i++){
ipk.add(ip[i]);
gateipk.add(gateip[i]);
dnsk.add(dns[i]);
}
for(i=0;i<6;i++){
mack.add(mac[i]);
}
doc["subnet"] = subnet;
doc["dhcp"] = DHCP;
doc["alertbuzz"] = alertbuzz;
const size_t strsize = msgpack ? measureMsgPack(doc) : measureJson(doc);
char out[strsize];
if(msgpack) serializeMsgPack(doc,strsize);
else serializeJson(doc,strsize);
return out;
}