You are creating a JSON string from the object that was created by parsing the JSON string that you get in the response. As the SetupApplications
function doesn't take a JSON string in the first version of the code, it shouldn't do that in the second either. Just pass the object to the function without turning it into JSON again:
$.post("/MyController/MyAction", function (data) {
SetupApplications(data.Apps);
}, "json");