0
我使用github/fetch polyfill發佈一些數據傳回服務器。ASP.NET MVC - 自動deserialise JSON取POST
fetch('./PerformSearch', {
method: 'POST',
header: {
'Accept' : 'application/json',
'Content-type' : 'application/json'
},
body: JSON.stringify({
terms: this.refs.termsFilter.getSelections(),
details: this.refs.detailsFilter.getSelections(),
dateRange: {
from: new Date(),
til: new Date()
}
})
})
但控制器不自動deserialising在參數請求到數據對象的體像它會從表單變量做。如果我雖然做到這一點使用的XmlHttpRequest,它的工作原理..
var request = new XMLHttpRequest();
request.open("POST", url, true);
request.setRequestHeader("Content-type","application/json;charset=UTF-8")
...
request.send(JSON.stringify(data))
功能接收控制器的要求是目前很簡單 - 它沒有做任何事情,我只是想獲得它deseralise JSON的身體數據對象現在使用下列內容:
public JsonResult PerformSearch(SearchModel.SearchSelections data)
{
//data has not been serialised
Stream req = Request.InputStream;
string body = new IO.StreamReader(req).ReadToEnd;
Console.WriteLine(body); // writes a json string
}
所以,是的,我會這樣deserialise自己使用JSON庫裏面的功能,但我寧願找到一個方法讓控制器做它我。
UPDATE:
這裏是我想deseralise的.NET對象:
class SearchModel
{
public class SearchSelections
{
public SearchTermList terms { get; set; }
public SearchDetailsList details { get; set; }
public DateRange dateRange { get; set; }
}
public class SearchTermList
{
public IEnumerable<string> exams { get; set; }
public IEnumerable<string> areas { get; set; }
public IEnumerable<string> classes { get; set; }
public IEnumerable<string> tokens { get; set; }
}
public class SearchDetailsList
{
public IEnumerable<string> studyTypes { get; set; }
public IEnumerable<string> species { get; set; }
public IEnumerable<string> strains { get; set; }
}
public class DateRange
{
public System.DateTime @from { get; set; }
public System.DateTime til { get; set; }
}
}
你確定您的SearchModel.SearchSelections模型是否與您傳輸到服務器的JSON模型相對應? – Anton
是的,如果你喜歡,我可以將它們添加到問題中? –
是,請添加它 – Anton