Asp.net mvc 将JSON对象作为参数传递给MVC控制器

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对象的类,并使用与参数相同的字段名,但我希望我的控制器接受具有不同字段名的任意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
}