5

次の任意のJSONオブジェクトがあります(フィールド名は変更される可能性があります)。

  {
    firstname: "Ted",
    lastname: "Smith",
    age: 34,
    married : true
  }

-

public JsonResult GetData(??????????){
.
.
.
}

引数と同じフィールド名を持つJSONオブジェクトと同じようにクラスを定義できることは知っていますが、コントローラーに異なるフィールド名を持つ任意のJSONオブジェクトを受け入れてもらいたいと思います。

4

3 に答える 3

6

カスタム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;
    }

このソリューションの本当の利点は、引数の組み合わせごとに新しいクラスを定義する必要がないことと、それに加えて、オブジェクトを元の型に簡単にキャストできることです。

更新しました

これで、postメソッドには次のような引数がなくなったため、GETアクションメソッドとPOSTアクションメソッドをマージすることもできます。

 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);
}
于 2012-08-23T06:27:28.903 に答える
1

同じ署名を持つ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.
}
于 2012-08-22T16:50:59.047 に答える
0

これはMVC4でも使用できます

public JsonResult GetJson(Dictionary<string,string> param)
{
    //do work
}
于 2014-01-15T08:53:35.113 に答える