Cereal / C ++ 11 - Как указать необязательные параметры для десериализации - PullRequest
0 голосов
/ 16 мая 2018

У меня есть класс, десериализованный стандартной функцией:

template<class Archive> // public serialization (normal)
void serialize(Archive & ar)
{
  ar(
    cereal::make_nvp("parameter_1", parameter_1), 
    cereal::make_nvp("parameter_2", parameter_2), 

    cereal::make_nvp("parameter_3", parameter_3), 

    cereal::make_nvp("parameter_4", parameter_4), 

    cereal::make_nvp("parameter_5", parameter_5) ); 
}

Но в моем случае parameter_4 и parameter_5 являются необязательными.

Они могут быть или не быть во входной строке JSON.

Когда я пытаюсь десериализовать такой неполный JSON с пропуском некоторых параметров, я получаю "ошибку" Cereal - она ​​не может найти эти пропущенные параметры.

Есть ли способ, как указать, что некоторые параметры являются необязательными, и в случае, если они не являются частью значений JSON по умолчанию, будут использоваться?

1 Ответ

0 голосов
/ 16 мая 2018

как насчет:

..
if (exist(parameter_4, parameter_5) {
  ar(
     cereal::make_nvp("parameter_1", parameter_1), 
     cereal::make_nvp("parameter_2", parameter_2), 
     cereal::make_nvp("parameter_3", parameter_3), 
     cereal::make_nvp("parameter_4", parameter_4), 
     cereal::make_nvp("parameter_5", parameter_5) ); 
}
else {
  ar(
     cereal::make_nvp("parameter_1", parameter_1), 
     cereal::make_nvp("parameter_2", parameter_2), 
     cereal::make_nvp("parameter_3", parameter_3) );
}
...

или что-то подобное ..

...