You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.9 KiB
C++
80 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include "nlohmann/json.hpp"
|
|
|
|
#include "DebugLog.h"
|
|
|
|
template <typename T>
|
|
class CJsonParserText
|
|
{
|
|
public:
|
|
bool Deserialize(const std::string& strText, T& myOption)
|
|
{
|
|
if (strText.empty())
|
|
{
|
|
// nothing to parse
|
|
return false;
|
|
}
|
|
|
|
try
|
|
{
|
|
// parse string into json
|
|
nlohmann::json jf = nlohmann::json::parse(strText);
|
|
|
|
// deserialize json into object
|
|
myOption = jf.template get<T>();
|
|
|
|
return true;
|
|
}
|
|
catch (std::exception& e)
|
|
{
|
|
std::string ss = e.what();
|
|
DebugLog("CJsonParserText::Deserialize(const std::string& strText, T& myOption) {} : {}", strText, ss);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool Serialize(std::string& strText, const T& myOption)
|
|
{
|
|
// convert object into json
|
|
nlohmann::json jf(myOption);
|
|
|
|
strText = nlohmann::json::to_string(jf);
|
|
|
|
return false;
|
|
}
|
|
|
|
bool Deserialize(const std::string& strText, std::vector<T>& myOption)
|
|
{
|
|
if (strText.empty())
|
|
{
|
|
// nothing to parse
|
|
return false;
|
|
}
|
|
|
|
try
|
|
{
|
|
// load json file
|
|
nlohmann::json jf = nlohmann::json::parse(strText);
|
|
|
|
// deserialize json into object
|
|
myOption = jf.template get<std::vector<T>>();
|
|
|
|
return true;
|
|
}
|
|
catch (std::exception& e)
|
|
{
|
|
std::string ss = e.what();
|
|
DebugLog("CJsonParserText::Deserialize(const std::string& strText, std::vector<T>& myOption) {} : {}", strText, ss);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool Serialize(std::string& strText, const std::vector<T>& myOption)
|
|
{
|
|
// convert object into json
|
|
nlohmann::json jf(myOption);
|
|
strText = nlohmann::json::to_string(jf);
|
|
return false;
|
|
}
|
|
}; |