当前位置: 首页 > 面试题库 >

将JSON对象作为参数传递给MVC控制器

那安宁
2023-03-14
问题内容

我有以下任意JSON对象(字段名称可能会更改)。

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

--

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

我知道我可以像定义具有相同字段名的JSON对象那样定义类,但是我希望控制器接受具有不同字段名的任意JSON对象。


问题答案:

如果您想将自定义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;
    }

该解决方案的真正好处是,您不需要为每个参数组合定义一个新类,并且除此之外,您可以轻松地将对象转换为其原始类型。

更新

现在,您甚至可以合并GET和POST操作方法,因为您的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);
}


 类似资料:
  • 问题内容: 我正在使用.Net 4,MVC 3和jQuery v1.5做一些工作 我有一个JSON对象,它可以根据调用它的页面而改变。我想将对象传递给控制器​​。 我了解如果我创建一个自定义模型,例如 并在我的控制器中使用它,例如 并使用jQuery的.ajax方法传递对象,如下所示: 这工作正常,我的JSON对象已映射到我的C#对象。我想做的是通过一个可能更改的JSON对象。当它更改时,我不需要

  • 我正在开发将复杂数据从window.open()传递到MVC Controller action方法参数的javascript功能。我能够通过构建查询字符串并从控制器中的[FromQuery]检索它们来实现它。 但我的问题是,我想将数据作为模型对象传递。在窗户里可以吗。打开() 下面是我的javascript代码 如您所见,我可以在URL中传递数据,但它似乎是公开的。那么,有没有办法传入var u

  • 问题内容: 我有以下内容,但它不起作用,我在stackoverflow上的某个地方读到了它的工作原理,但我似乎无法使其工作..它出错了……我在做错什么吗? 如果我确实传递了这样的数据-它可以工作-所以我知道我的服务正在工作 问题答案: 我相信代码将在对象上调用.value或.toString(),然后通过网络传递。您想传递JSON。 因此,包括JSON JavaScript库 http://www

  • 问题内容: 在MVC4中,如何将javascript对象传递给AJAX中的C#控制器?最后,我尝试了一下,但没有成功。 Javascript客户端: C#服务器端方法: 我的参数始终为null。我试图更改contentType,但仍然无法正常工作。我的错误在哪里?我找到了一些帖子,但没有发现我做错了什么。 非常感谢。 问题答案: 确保javascript和C#模型之间的属性名称匹配。在你的问题,你

  • 问题内容: 我有一个复杂的JSON对象,该对象没有任何问题即可发送到View(如下所示),但是当通过AJAX调用将数据序列化回.NET对象时,我无法弄清楚如何将该数据序列化回.NET对象。各个部分的详细信息如下。 我不确定如何将该对象传递给Controller方法,下面有此方法,其中Timelines对象使用Properties镜像上述JS对象。 我正在使用的jQuery是: 我还看到了使用’Js

  • 问题内容: 我的JavaScript中有代码,可以使用ajax发布数据: 在控制器中,我有一个带有签名的方法: 我可以正确地拥有inttype。但是objectType不会为null,但是如果我确实喜欢objectType.prop1,它将抛出错误。如果我将用JSON.stringify JavaScript中的对象类型,则控制器中的objectType将具有字符串值。 是否可以使用像这样的动态数