Como receber JSON como um parâmetro do método de ação MVC 5

Durante toda a tarde, tentei rastrear a Web tentando receber um objeto JSON no controlador de ação.

Qual é a maneira correta e ou mais fácil de fazê-lo?

Eu tentei o seguinte: 1:

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

    }

O que me deu um valor nulo na minha 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");
        }

    }

o que me dá um erro 500 no lado do jquery que está tentando postar nele? (o que significa que não foi vinculado corretamente).

Aqui está o meu 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);
        }
    });
}

Tudo o que eu quero fazer é receber meu objeto JSON na minha ação mvc?