Thank you.
It turns out jsonEncode does a better job encoding json than what I had.
The single quote in json was my problem. Needs to be double quote otherwise not valid.
So jsonEncode does all that behind the scene and encodes the dictionary object to:
{“Id”: 2, “Desc”:“Testing”}