JSON作为null传递给方法参数

JSON passing as a null to a method argument

本文关键字:方法 参数 作为 null JSON      更新时间:2023-09-26

我终于尝试使用KnockoutJS了。我探索了将JSON数据发送到MVC 4中的C#方法的较短方法,但最终使用了AJAX方法。我对以下内容有些困惑,希望有人能帮忙。

Javascript

var VM = function () {
    var self = this;
    self.ValidateAndCreate = function () {
        console.log("entered");
        var a = {
            b: "1",
            c: "2",
            d: {
                e: "3"
            }
        };
        var input = { data: a }
        console.log(JSON.stringify(input));
        $.ajax({
            url: '/McAfee/ValidateAndCreatePartner',
            data: JSON.stringify(input),
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            success: function (result) {
                console.log('success');
            }
        });
    }
}
var viewModel = new VM();
ko.applyBindings(viewModel);

C#

    [HttpPost]
    public void ValidateAndCreatePartner(string data)
    {
        var x = JsonConvert.DeserializeObject(data);
        RedirectIfSuccess();
    }

当前发生的情况是,ValidateAndCreatePartner激发,但参数data为null,随后NewtonSoft.Json.JsonConvert.DeserializeObject失败。如何解决此问题?

MVC中最简单的方法是根据数据创建类:它更干净!例如,在您的示例中,您可以尝试以下操作:

[HttpPost]
public ActionResult Test(TestClass data) {
    RedirectIfSuccess();
}

public class TestClass
{
    public string b { get; set; }
    public string c { get; set; }
    public TestSubClass d { get; set; }
}
public class TestSubClass
{
    public int e { get; set; }
}

由于内容类型为application/json,视图函数的参数将自动反序列化(不再是字符串)。

在服务器端创建一个与您发送的视图匹配的视图模型,并将其用作视图的类型参数:

public class D {
    public string e {get;set;}
}
public class A {
    public string b {get;set;}
    public string c {get;set;}
    public D d {get;set;}
}   

[HttpPost]
public void ValidateAndCreatePartner(A data)
{
    // no need to deserialize data
    RedirectIfSuccess();
}