コード例 #1
0
ファイル: JsonSerializer.cpp プロジェクト: Thalhammer/EasyCpp
		Json::Value JsonSerializer::toValue(AnyValue val) const
		{
			auto info = val.type_info();
			if (val.isType<bool>())
			{
				bool v = val.as<bool>();
				return Json::Value(v);
			}
			else if (info.isIntegral())
			{
				if (info.isUnsigned())
				{
					uint64_t v = val.as<uint64_t>();
					return Json::Value((Json::Value::UInt64)v);
				}
				else {
					int64_t v = val.as<int64_t>();
					return Json::Value((Json::Value::Int64)v);
				}
			}
			else if (info.isFloatingPoint())
			{
				double v = val.as<double>();
				return Json::Value(v);
			}
			else if (val.isType<std::vector<AnyValue>>())
			{
				Json::Value res = Json::arrayValue;
				std::vector<AnyValue> v = val.as < std::vector<AnyValue>>();
				for (AnyValue any : v)
					res.append(this->toValue(any));
				return res;
			}
			else if (val.isType<Bundle>())
			{
				Json::Value res = Json::objectValue;
				Bundle b = val.as<Bundle>();
				for (const auto& val : b)
				{
					res[val.first] = this->toValue(val.second);
				}
				return res;
			}
			else if (val.isType<std::nullptr_t>())
			{
				return Json::nullValue;
			}
			else if (val.isSerializable())
			{
				return this->toValue(val.serialize());
			}
			else if (val.isConvertibleTo<std::string>())
			{
				std::string v = val.as<std::string>();
				return Json::Value(v);
			}
			else
			{
				throw std::logic_error("Type is not convertible.");
			}
		}