[英]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
對象-您有一個包含name
和value
的對象數組,而ASP.NET MVC正在尋找一個具有Colour
和Name
對象。
如果您創建具有正確字段的類,並更新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.