I suppose the documentation for the data_ param could be worded a bit better; the dictionary will be JSON-encoded automatically by the InternetPOST class when communicating with the target server. As such, you do not need to manually JSON encode anything yourself first - just fill a hdi::core::DictionaryPref as needed and pass it to InternetPOST.
Similarly, when you receive a response, it is merely handled as a string. However, if the string contains JSON-encoded data, you can pass the string to the hdi::core::PrefData::parse() method to convert the string's data into the appropriate structure of PrefData subclasses in memory.
Similarly, when you receive a response, it is merely handled as a string. However, if the string contains JSON-encoded data, you can pass the string to the hdi::core::PrefData::parse() method to convert the string's data into the appropriate structure of PrefData subclasses in memory.