#ifndef JSONMAPPER_H #define JSONMAPPER_H #include #include #include #include #include class JsonMapper { public: // 从JSON对象映射到任意结构体/类 template static T fromJson(const QJsonValue &json) { T obj; if (!json.isObject()) { return obj; } QJsonObject jsonObj = json.toObject(); const QMetaObject *metaObj = &T::staticMetaObject; for (int i = metaObj->propertyOffset(); i < metaObj->propertyCount(); ++i) { QMetaProperty prop = metaObj->property(i); QString propName = prop.name(); if (jsonObj.contains(propName)) { QVariant value = jsonObj[propName].toVariant(); if (value.canConvert(prop.type())) { prop.writeOnGadget(&obj, value); } } } return obj; } // 从JSON数组映射到列表 template static QList fromJsonArray(const QJsonValue &json) { QList list; if (!json.isArray()) { return list; } QJsonArray array = json.toArray(); for (const QJsonValue &item : array) { list.append(fromJson(item)); } return list; } }; #endif // JSONMAPPER_H