我有一个复杂的JSON对象,它被发送到视图时没有任何问题(如下所示),但我不知道如何在通过AJAX调用将此数据传递回控制器时将其序列化为.NET对象。下面是各个部分的详细信息。
var ObjectA = {
"Name": 1,
"Starting": new Date(1221644506800),
"Timeline": [
{
"StartTime": new Date(1221644506800),
"GoesFor": 200
}
,
{
"StartTime": new Date(1221644506800),
"GoesFor": 100
}
]
};
我不确定如何将此对象传递给Controller方法,我在下面的方法中使用了Timeline对象使用Properties来镜像上面的JS对象。
public JsonResult Save(Timelines person)
我使用的jQuery是:
var encoded = $.toJSON(SessionSchedule);
$.ajax({
url: "/Timeline/Save",
type: "POST",
dataType: 'json',
data: encoded,
contentType: "application/json; charset=utf-8",
beforeSend: function() { $("#saveStatus").html("Saving").show(); },
success: function(result) {
alert(result.Result);
$("#saveStatus").html(result.Result).show();
}
});
我见过这个类似的问题,但不完全相同,因为我不是使用表单来操作数据。How to pass complex type using json to ASP.NET MVC controller
我也看到过使用'JsonFilter‘手动反序列化JSON的引用,但我想知道是否有一种方法可以通过ASP.NET MVC在本地实现?或者,以这种方式传递数据的最佳实践是什么?
发布于 2009-02-18 15:24:54
您也可以使用JavaScriptSerializer类。这将允许您将json反序列化为.NET对象。有一个通用的Deserialize<T>
,尽管您需要.NET对象具有与javascript对象类似的签名。此外,还有一个只生成普通object
的DeserializeObject
方法。然后,您可以使用反射来获取所需的属性。
如果您的控制器采用FormCollection
,并且您没有向data
添加任何其他内容,则json应该在form[0]
中
public ActionResult Save(FormCollection forms) {
string json = forms[0];
// do your thing here.
}
发布于 2010-11-11 04:42:21
此答案是DaRKoN_使用object filter的答案的后续:
[ObjectFilter(Param = "postdata", RootType = typeof(ObjectToSerializeTo))]
public JsonResult ControllerMethod(ObjectToSerializeTo postdata) { ... }
我遇到了一个问题,如何向一个action方法发送多个参数,其中一个是json对象,另一个是普通字符串。我是MVC的新手,我刚刚忘记我已经用非ajaxed视图解决了这个问题。
如果我需要一个视图上的两个不同的对象,我会怎么做。我会创建一个ViewModel类。因此,假设我需要person对象和address对象,我将执行以下操作:
public class SomeViewModel()
{
public Person Person { get; set; }
public Address Address { get; set; }
}
然后,我会将视图绑定到SomeViewModel。您可以使用JSON做同样的事情。
[ObjectFilter(Param = "jsonViewModel", RootType = typeof(JsonViewModel))] // Don't forget to add the object filter class in DaRKoN_'s answer.
public JsonResult doJsonStuff(JsonViewModel jsonViewModel)
{
Person p = jsonViewModel.Person;
Address a = jsonViewModel.Address;
// Do stuff
jsonViewModel.Person = p;
jsonViewModel.Address = a;
return Json(jsonViewModel);
}
然后在视图中,您可以对JQuery使用一个简单的调用,如下所示:
var json = {
Person: { Name: "John Doe", Sex: "Male", Age: 23 },
Address: { Street: "123 fk st.", City: "Redmond", State: "Washington" }
};
$.ajax({
url: 'home/doJsonStuff',
type: 'POST',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify(json), //You'll need to reference json2.js
success: function (response)
{
var person = response.Person;
var address = response.Address;
}
});
https://stackoverflow.com/questions/560575
复制相似问题