通过JSON序列化包含子对象的对象

时间:2013-06-25 21:24:21

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-2

我是JSON的新手,我尝试在我的控制器中的JsonResult方法中传递一些数据。 该方法接受AModel作为参数。此AModel定义了一些属性和BModel。

所以,我写道:

function loadDatas() {

    var values = 
    {
        "Title" : "The title",
        "Text" : "Blahblahblah",
        "BModel" : 
        {
            "Summary" : "lorem ipsum",
            "Page" : "15"
        }
    };

    $.post("@Url.Action("Load", "MyController")",values,function(data)
    {
        // do stuff;
    });

我的Load方法定义为:

[HttpPost]
public JsonResult Load(AModel test)
{
    return Json(test); //dummy example, just serialize back the AModel object
}

当我在Load的开括号上放置断点时,test.Title和test.Text具有良好的值,但test.BModel.Summary和test.BModel.Page为null。

这个问题中最糟糕的部分是如果我发出警报(values.HousingModel.Summary);显示的值是好的!为什么它没有正确发送到我的方法,而values.Title和values.Text是??

我用这个链接来理解JSON格式(http://www.sitepoint.com/javascript-json-serialization/),我的看似有效......不是吗?

感谢您的帮助

亚历

2 个答案:

答案 0 :(得分:1)

我的工作代码

行动方法

[HttpPost]
public JsonResult Json(AModel test)
{
    return Json(new { Success = true });
}

<强> JQuery的

$.ajax({
    url         :    "@Url.Action("Load", "MyController")",
    contentType :    "application/json; charset=utf-8",
    dataType    :    "json",
    type        :    "POST",
    data        :    JSON.stringify({test: values})
})}).done(function (result) {
    //Success
}).fail(function (result) {
    //Failed
}).always(function(result) { 
    //Always
});

<强>模型

public class AModel
{
    public string Title { get; set; }
    public string Text { get; set; }

    public BModel BModel { get; set; }
}

public class BModel
{
    public string Summary { get; set; }
    public string Page { get; set; }
}

<强>误

  1. 序列化正在进行中
  2. 内容类型缺失
  3. 缺少类型

答案 1 :(得分:0)

没有看到小时模型,我们无法给你明确的答案,但...... 您的BModel.Page可能是C#中的整数吗?如果是这样,模型绑定器无法使用您的javascript字符串值...

在该SubObject上设置您的值