Asp.net mvc 将JSON对象作为参数传递给MVC控制器
我有以下任意JSON对象(字段名可能会更改) -Asp.net mvc 将JSON对象作为参数传递给MVC控制器,asp.net-mvc,json,jsonresult,Asp.net Mvc,Json,Jsonresult,我有以下任意JSON对象(字段名可能会更改) - 我知道我可以定义一个类似于JSON对象的类,并使用与参数相同的字段名,但我希望我的控制器接受具有不同字段名的任意JSON对象。拥有一个具有相同签名的ViewModel,并将其用作参数类型。然后,模型绑定将起作用 public class Customer { public string firstname { set;get;} public string lastname { set;get;} public int age{ se
我知道我可以定义一个类似于JSON对象的类,并使用与参数相同的字段名,但我希望我的控制器接受具有不同字段名的任意JSON对象。拥有一个具有相同签名的ViewModel,并将其用作参数类型。然后,模型绑定将起作用
public class Customer
{
public string firstname { set;get;}
public string lastname { set;get;}
public int age{ set;get;}
public string location{ set;get;}
//other relevant proeprties also
}
您的操作方法如下所示
public JsonResult GetData(Customer customer)
{
//check customer object properties now.
}
如果您想将自定义JSON对象传递给MVC操作,那么您可以使用这个解决方案,它就像一个符咒
public string GetData()
{
// InputStream contains the JSON object you've sent
String jsonString = new StreamReader(this.Request.InputStream).ReadToEnd();
// Deserialize it to a dictionary
var dic =
Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<String, dynamic>>(jsonString);
string result = "";
result += dic["firstname"] + dic["lastname"];
// You can even cast your object to their original type because of 'dynamic' keyword
result += ", Age: " + (int)dic["age"];
if ((bool)dic["married"])
result += ", Married";
return result;
}
你可以使用这样的助手方法来促进你的工作
public static Dictionary<string, dynamic> GetDic(HttpRequestBase request)
{
String jsonString = new StreamReader(request.InputStream).ReadToEnd();
return Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(jsonString);
}
公共静态字典GetDic(HttpRequestBase请求)
{
String jsonString=newstreamreader(request.InputStream.ReadToEnd();
返回Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString);
}
您也可以在MVC4中使用它
public JsonResult GetJson(Dictionary<string,string> param)
{
//do work
}
publicjsonresult-GetJson(字典参数)
{
//工作
}
检查问题瓦迪姆,我知道。。。问题是FormCollection不接受JSON…这是一个很好的解决方案,可以避免在客户端和服务器之间强键入所有通信。
public ActionResult GetData()
{
// GET method
if (Request.HttpMethod.ToString().Equals("GET"))
return View();
// POST method
.
.
.
var dic = GetDic(Request);
.
.
String result = dic["fname"];
return Content(result);
}
public static Dictionary<string, dynamic> GetDic(HttpRequestBase request)
{
String jsonString = new StreamReader(request.InputStream).ReadToEnd();
return Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(jsonString);
}
public JsonResult GetJson(Dictionary<string,string> param)
{
//do work
}