我想使用C++将JSON文件反序列化为一个对象(类)。我查看了rapidjson库,并使每个类都有一个反序列化方法,其中根作为参数,因此它可以自行反序列化。它看起来像这样:
void PoliceOfficer::Deserialize(rapidjson::Value& root)
{
if (root.IsObject())
{
if (root.HasMember("name"))
{
if (root["name"].IsString())
{
name = root["name"].GetString();
}
}
if (root.HasMember("maxHealth"))
{
if (root["maxHealth"].IsNumber())
{
maxHealth = (float)root["maxHealth"].GetDouble();
}
}
if (root.HasMember("skills"))
{
rapidjson::Value& skills = root["skills"];
if (skills.IsArray())
{
for (rapidjson::SizeType i = 0; i < skills.Size(); i++)
{
Skill tempSkill;
tempSkill.Deserialize(skills[i]);
m_skills.push_back(tempSkill);
}
}
}
}
}
但这似乎是很多工作。您需要在所有要反序列化自身的类中实现此方法。所以我想知道是否有任何自动执行此操作的方法,例如以下代码行(JSON.NET):
Movie m = JsonConvert.DeserializeObject<Movie>(json);
所以我不需要为所有类编写反序列化方法。我这样做的方式是唯一的吗?我正在使用rapidjson,但我愿意尝试其他库。
希望问题表述清楚 :)
提前感谢!