如何在ASP.NET MVC中反序列化JSON

时间:2017-05-04 13:31:09

标签: c# jquery asp.net json asp.net-mvc

根据Fiddler的说法,我从JQuery AJAX传来的帖子是: -

$(input1, input2, input3)

将我的功能作为MVC控制器

[
    {
        "name": "Colour",
        "value": ""
    },
    {
        "name": "Name",
        "value": "The Name"
    }
]

我可以在getadvanced上设置一个断点,但值为null,我错过了什么。我做了另一个有效的页面,但Ajax格式不同,我想用

/* In Model */
public class SearchObj
{
   public string Colour;
   public string Name;
}

/* In Controller */
    [HttpPost]
public JsonResult getadvancedsearch(SearchObj oSearch)
{

是最好的方式。问题是为什么即使值不是

,oSearch上的值也会为空白

JQuery是: -

JSON.stringify($("#TheForm").serializeArray())

3 个答案:

答案 0 :(得分:1)

您的JSON显示了一个包含多个对象的数组,它们甚至看起来都不像SearchObj个对象 - 您有一组包含namevalue的对象,以及ASP .NET MVC正在寻找一个ColourName的对象。

如果您创建一个具有正确字段的类,并更新您的getadvancedsearch以获取数组,那么绑定应该可以正常工作。但看起来您只是错误地生成了JSON。

你可能真的想这样做:

$("#TheForm").serialize()

这应该为您当前的控制器代码提供正确格式的JSON。

答案 1 :(得分:1)

您将地图发布到IEnumable<CorrectedSearchObj>

的Json

其中CorrectedSearchObj看起来像这样

public class CorrectedSearchObj 
{
    public string name { get; set; }
    public string value { get; set; }
}

如果你想发送你的SearchObj,那么Json看起来像

{ "Color" : "", "Name": "The Name" }

答案 2 :(得分:0)

尝试使用

var searchObject  ={
  Colour : '',
  Name : ''
};

var fields =$("#TheForm").serializeArray();
jQuery.each( fields, function( i, field ) {
    if (field.name ==='Colour'){
    searchObject.Colour = field.value;
    }
    if (field.name ==='Name'){
    searchObject.Name = field.value;
    }
});

将其传递给数据:

data:  JSON.stringify(searchObject),

然后在控制器中:

[HttpPost]
public JsonResult getadvancedsearch(string json)
{
SearchObj oSearch= JsonConvert.DeserializeObject<SearchObj >(json);

使用Newsoft Json库