簡體   English   中英

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

[英]How to deserialize JSON in ASP.NET MVC

根據Fiddler的說法,我從JQuery AJAX傳遞的帖子是:-

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

用我在MVC Controller中的功能

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

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

我可以在getadvanced上設置一個斷點,但是值是null,是否缺少某些內容。 我已經完成了另一頁的工作,但是Ajax格式有所不同,我認為使用

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

是最好的方法。 問題是,即使oSearch中的值不是空白,為什么它們仍為空白?

的jQuery是:-

$(function () {
    $("#TheForm").submit(function (e) {
    var status = this.value;
    e.preventDefault();
    $.ajax({
    type: "Post",
    url: '@("/fetch/getadvancedsearch")',
    dataType: "json",
    data: JSON.stringify($("#TheForm").serializeArray()),
    contentType: "application/json; charset=utf-8",
    success: .... 

您的JSON顯示了一個由多個對象組成的數組,它們甚至看起來都不像SearchObj對象-您有一個包含namevalue的對象數組,而ASP.NET MVC正在尋找一個具有ColourName對象。

如果您創建具有正確字段的類,並更新getadvancedsearch以獲取數組,則綁定應能正常工作。 但是看起來您只是錯誤地生成了JSON。

您可能真的想這樣做:

$("#TheForm").serialize()

這應該為您提供適合當前控制器代碼的正確格式的JSON。

您發布的Json映射到IEnumable<CorrectedSearchObj>

其中CorrectedSearchObj看起來像這樣

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

如果您嘗試發送SearchObj,則Json看起來像

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

嘗試使用

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庫

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM