将json数据转换为控制器模型时出错

时间:2014-04-24 07:29:00

标签: json asp.net-mvc-4

在ASP.Net MVC 4中,我需要使用ajax方法将json数据发布到控制器中,并将json转换回模型。我可以从我的模型中获取json,但我无法将其转换回来。 我的控制器出了异常。在这里,我创建了一个模型对象,由另一个ajax方法调用为json类型。并使用另一种ajax方法发布此数据。

这是我的代码:

public class LiveController : Controller
{
    //
    // GET: /Live/

    public JsonResult myproduct()
    {
        Product Book = new Product {pId=1,pName="Novel" };
        return Json(Book,JsonRequestBehavior.AllowGet);
    }

    public ActionResult viewproduct()
    {
        return View();
    }
    [HttpPost]
    public String loadproduct(String Book1)
    {

        Product values = JsonConvert.DeserializeObject<Product>(Book1);
        return "ready";
    }
}

public class Product
{
    public string pName { get; set; }
    public int pId { get; set; }
}

$(document).ready(function () {

    var Book;
    $('#searchbtn').click(function () {
        $.ajax({
            url: "/Live/myproduct",
            type: "GET",
            cache: false,
            dataType: "json",
            contentType: "application/json",
            data: {},

            success: function (result) {

                Book = result;
                $.each(result, function (key, val) {
                    $('.prolist').append("<li>" + val + "</li>");

                });
            }
        });

    });
    $('#postbtn').click(function () {

         var Book1 = JSON.stringify(Book);

        $.ajax({
            url: "/Live/loadproduct",
            type: "POST",
            cache: false,
            async: true,
            dataType: "json",
            contentType: "application/json",
            data:Book1  ,

            success: function (result) {
                alert("success");
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert(xhr.status);
            }
        });
    });
});

请提供解决方案。

2 个答案:

答案 0 :(得分:0)

这样做:

var Jsonobject = JsonConvert.DeserializeObject<Product>("jsonstring");// pass your string json here

Product result = Jsonobject.Product;

答案 1 :(得分:0)

以下是适用于我的代码

public class LiveController:Controller     {         //         // GET:/ Live /

    public JsonResult myproduct()
    {
        Product Book = new Product {pId=1,pName="Novel" };
        return Json(Book,JsonRequestBehavior.AllowGet);
    }

    public ActionResult viewproduct()
    {
        return View();
    }
    [HttpPost]
    public JsonResult loadproduct()
    {
        var request = ControllerContext.HttpContext.Request;



        request.InputStream.Seek(0, SeekOrigin.Begin);
        var json= new StreamReader(request.InputStream).ReadToEnd(); ;




        Product result = JsonConvert.DeserializeObject<Product>(json);// pass your string json here

        return Json(result,JsonRequestBehavior.AllowGet);

        //var Jsonobject = JsonConvert.DeserializeObject<Product>("jsonstring"); 
        //Product result = Jsonobject;
        //return "ready";
    }
}

}

$(document).ready(function(){

    var Book;
    $('#searchbtn').click(function () {
        $.ajax({
            url: "/Live/myproduct",
            type: "GET",
            cache: false,
            dataType: "json",
            contentType: "application/json",
            data: {},

            success: function (result) {

                Book = result;
                $.each(result, function (key, val) {
                    $('.prolist').append("<li>" + val + "</li>");

                });
            }
        });

    });
    $('#postbtn').click(function () {


        var jsonstring = JSON.stringify(Book);

        $.ajax({
            url: "/Live/loadproduct",
            type: "POST",
            cache: false,
            async: true,
            dataType: "text",
            contentType: "application/json",
            data: jsonstring,

            success: function (result) {
                console.log(result);
                alert(result)
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert(xhr.status);
            }
        });
    });













});