You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用nlohmann's json库序列化嵌套结构体时遇到问题

问题解决:nlohmann JSON库序列化嵌套结构体失败

问题背景

尝试用nlohmann JSON库序列化GetRoomsResponse结构体,定义如下:

typedef struct GetRoomsResponse
{
    unsigned int status;
    std::vector<RoomData> rooms;
}GetRoomsResponse;

其中RoomData结构体定义在Room.h中:

typedef struct RoomData
{
    unsigned int id;
    std::string name;
    unsigned int maxPlayers;
    unsigned int numOfQuestionsInGame;
    unsigned int timePerQuestion;
    unsigned int isActive;
}RoomData;

按照文档定义了非侵入式序列化宏:

NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(GetRoomsResponse, status, rooms);

但编译时出现大量错误,尝试给RoomData添加默认构造函数后问题仍未解决。

问题原因

错误核心是nlohmann JSON库无法自动推导嵌套结构体RoomData的序列化规则。虽然为GetRoomsResponse添加了序列化宏,但库不知道如何处理std::vector<RoomData>类型的成员,必须显式为RoomData提供序列化/反序列化规则。

解决方案

给RoomData结构体也添加非侵入式序列化宏,具体步骤如下:

  1. 在Room.h文件中确保已包含nlohmann JSON库头文件:
#include <nlohmann/json.hpp>
using json = nlohmann::json;
  1. 在RoomData结构体定义后,添加对应的序列化宏:
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(RoomData, id, name, maxPlayers, numOfQuestionsInGame, timePerQuestion, isActive);
  1. 确保在使用GetRoomsResponse的序列化宏时,RoomData的定义及其序列化宏已被正确包含(比如在JsonResponsePacketSerializer.h中提前引入Room.h)。

完成以上操作后,库就能正确处理GetRoomsResponse中的std::vector<RoomData>成员,编译错误即可消除。

内容的提问来源于stack exchange,提问作者BeastasFiist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 05:42:11