Cómo recibir JSON como un parámetro del método de acción MVC 5

He estado intentando toda la tarde arrastrándome por la web tratando de recibir un objeto JSON en el controlador de acción.

¿Cuál es la forma correcta o más fácil de hacerlo?

He intentado lo siguiente: 1:

    //Post/ Roles/AddUser
    [HttpPost]
    public ActionResult AddUser(String model)
    {
        if(model != null)
        {
            return Json("Success");
        }else
        {
            return Json("An Error Has occoured");
        }

    }

Lo que me dio un valor nulo en mi entrada.

2:

    //Post/ Roles/AddUser
    [HttpPost]
    public ActionResult AddUser(IDictionary<string, object> model)
    {
        if(model != null)
        {
            return Json("Success");
        }else
        {
            return Json("An Error Has occoured");
        }

    }

lo que me da un error 500 en el lado jquery que intenta publicar en él? (lo que significa que no se unió correctamente).

Aquí está mi código jQuery:

<script>
function submitForm() {

    var usersRoles = new Array;
    jQuery("#dualSelectRoles2 option").each(function () {
        usersRoles.push(jQuery(this).val());
    });
    console.log(usersRoles);

    jQuery.ajax({
        type: "POST",
        url: "@Url.Action("AddUser")",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: JSON.stringify(usersRoles),
        success: function (data) { alert(data); },
        failure: function (errMsg) {
            alert(errMsg);
        }
    });
}

¿Todo lo que quiero hacer es recibir mi objeto JSON en mi acción mvc?

Respuestas a la pregunta(4)

Su respuesta a la pregunta