定義C#輔助類爲:將JSON數據提交給MVC控制器。爲什麼它不處理複雜類型?
'
公共類SelectedFiles { 公共字符串主機{獲得;組; }
public List<SelectedFile> Files { get; set; }
}
public class SelectedFile
{
public string ShortName {get; set;}
public string Category { get; set; }
}`
而讓定義兩個控制器方法(+反序列化助手):
private SelectedFiles Deserialize(string json)
{
using (MemoryStream stream = new MemoryStream(System.Text.ASCIIEncoding.ASCII.GetBytes(json)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(SelectedFiles));
return (SelectedFiles) serializer.ReadObject(stream);
}
}
/// <summary>
/// MVC seems to be incapable to deserizalize complex types.
/// </summary>
/// <param name="selectedFilesJSON"></param>
/// <returns></returns>
public void UploadFiles(SelectedFiles selectedFilesJSON)
{
var result = selectedFilesJSON;
}
/// <summary>
/// </summary>
/// <param name="selectedFilesJSON"></param>
/// <returns></returns>
public void UploadFilesJSON(string selectedFilesJSON)
{
if (!string.IsNullOrEmpty(selectedFilesJSON))
{
var result = this.Deserialize(selectedFilesJSON);
}
}
用JavaScript調用
var SelectedFiles = [];
var SelectedFile;
selectedCheckBoxes.each(function(idx, element){
SelectedFile = {ShortName: element.value, Category: "a category"};
SelectedFiles.push(SelectedFile);
});
var selectedFileMessage = {};
selectedFileMessage.Host = "test"
selectedFileMessage.Files = SelectedFiles;
var message = $.toJSON(selectedFileMessage);
$.ajax({url:"UploadFilesJSON", type:'POST', traditional:true, data: { selectedFilesJSON : message } , success: function(result){ alert(result);} });
$.ajax({url:"UploadFiles", type:'POST', traditional:true, data: { selectedFilesJSON : selectedFileMessage } , success: function(result){ alert(result);} });
第阿賈克斯POST方法會奏效。基本上將序列化的JSON對象作爲字符串轉儲到控制器方法。
第二個.ajax POST不起作用。它似乎沒有弄清楚如何從參數列表中反序列化'SelectedFiles'輔助類。
一個詞:「Flabergasted」
你有沒有真正的問題? – 2011-03-24 19:16:18
問題是「爲什麼這不起作用」?我錯過了一些微不足道的東西嗎?這是MVC部分的一個已知限制嗎? – Sentient 2011-03-24 19:18:05