К счастью, C++ не предлагает простой способ размытия линии между сетевым коммуникационным контентом и исходным кодом вашей программы. Что-то вроде всех этих ужасных основанных на размышлении Библиотеки JSON там не могут быть с C++. Кстати, хотя я не могу говорить о C#, основанные на отражениях библиотеки JSON на Java являются огромным нарушением лучших практик, описанных в знаменитой книге Effective Java Джошуа Блоха. См пункт 53, Предпочитают интерфейсы для отражения:
Как правило, объекты не должны быть доступны рефлекторно в нормальных приложений во время выполнения
В C++, нам не нужно такое руководство, потому что нет никакого отражения. Это в основном хорошее вещь.
Теперь, это не значит, что вам нужно написать собственный анализатор JSON, конечно. Хотя разбор JSON не является частью стандартной библиотеки, существуют сторонние альтернативы. Например, посмотрите на JSON for Modern C++.
Независимо от того, какую библиотеку вы используете, вам необходимо будет явно читать и писать вашим членам класса так или иначе.
То есть, если у вас есть следующий класс (который более или менее совпадений С # пример вы связаны):
struct Product
{
std::string name;
int price;
std::vector<std::string> sizes;
};
Затем с вышеуказанной библиотекой, вы должны превратить Product
объект в JSON как это:
json j = {
{ "name", product.name }, // explicit relationship between "name" and "name"
{ "price", product.price }, // explicit relationship between "price" and "price"
{ "sizes", product.sizes } // explicit relationship between "sizes" and "sizes"
};
std::cout << j << "\n";
и чтение:
json j;
std::cin >> j;
Product product;
product.name = j["name"]; // explicit relationship between "name" and "name"
product.price = j["price"]; // explicit relationship between "price" and "price"
product.sizes = j["sizes"]; // explicit relationship between "sizes" and "sizes"
Такое подход также называется неинтрузивным сериализации/десериализации.С другой стороны, подход intrusive с функциями члена или friend
был бы единственным способом, если вам нужен доступ к частным переменным-членам.
Вещи, чтобы иметь в виду:
- времени выполнения отражения является опасным и подверженным ошибкам в языках, которые поддерживают его.
- C++ не имеет отражения во время выполнения.
- C++ рекомендует вам четко разделить две проблемы: (1) Разбор JSON, (2) Сериализация/десериализация класса.
- Существуют бесплатные сторонние библиотеки для разбора JSON.
См ответ http://stackoverflow.com/a/39904347/606515 для JSON в/из преобразования объекта Lib C++. – kola