之前依赖 rapidjson 写过结构体转 json 的工具,使用的方法主要是手动往结构体里加可变参数的宏,然后使用__VA_ARGS__
进行成员遍历与赋值,具体的宏如下代码。
但这会破坏原有的结构体,就想能不能在结构体外面进行注册。想问下有没有什么好的办法?
/******************************************************
* Register class or struct members
* eg:
* struct Test
* {
* string A;
* string B;
* AIGC_JSON_HELPER(A, B)
* };
******************************************************/
#define AIGC_JSON_HELPER(...) \
std::map<std::string, std::string> __aigcDefaultValues; \
bool AIGCJsonToObject(aigc::JsonHelperPrivate &handle, \
rapidjson::Value &jsonValue, \
std::vector<std::string> &names) \
{ \
std::vector<std::string> standardNames = handle.GetMembersNames(#__VA_ARGS__); \
if (names.size() <= standardNames.size()) \
{ \
for (int i = names.size(); i < (int)standardNames.size(); i++) \
names.push_back(standardNames[i]); \
} \
return handle.SetMembers(names, 0, jsonValue, __aigcDefaultValues, __VA_ARGS__); \
}
1
wtfdsy 2021-12-27 17:51:44 +08:00
试试 https://github.com/nlohmann/json 这个?
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE 这个宏可以在结构体外部用 |