【问题标题】:ASP.Net MVC: how to create a JsonResult based on raw Json DataASP.Net MVC:如何基于原始 Json 数据创建 JsonResult
【发布时间】:2011-04-28 20:25:38
【问题描述】:

有一个 string 包含以下原始 Json 数据(为了问题而简化):

  var MyString =  "{ 'val': 'apple' }";

如何创建一个代表MyStringJsonResult 对象?

我尝试使用 Json(object) 方法。但它将原始 json 数据处理为一个字符串 - 逻辑上:P-。所以返回的 HTTP 响应如下所示:

"{ 'val': 'apple' }"

而不是给定的原始 Json 数据:

{ 'val': 'apple' }

这就是我想要实现的目标

【问题讨论】:

    标签: asp.net-mvc json serialization jsonresult


    【解决方案1】:

    Controller 上的Json() 方法实际上是一个帮助方法,它创建了一个新的JsonResult。如果我们查看the source code for this class*,我们可以看到它并没有真正做那么多——只是将内容类型设置为application/json,使用JavaScriptSerializer 序列化您的数据对象,然后编写它是结果字符串。您可以通过从控制器返回 ContentResult 来复制此行为(减去序列化,因为您已经这样做了)。

    public ActionResult JsonData(int id) {
        var jsonStringFromSomewhere = "{ 'val': 'apple' }";
        // Content() creates a ContentResult just as Json() creates a JsonResult
        return Content(jsonStringFromSomewhere, "application/json");
    }
    

    * 从 MVC2 开始,JsonResult 也会在用户发出 HTTP GET 请求(而不是 POST)时抛出异常。允许用户使用 HTTP GET 检索 JSON 具有 security implications,在您在自己的应用中允许这样做之前,您应该了解这一点。

    【讨论】:

    • +1 - 但是根据json.org,键和值需要用双引号括起来,而不是单引号。
    • 不错的收获。我只是复制了询问者使用的字符串。当然,整个答案假设您知道您的 JSON 字符串一开始就有效,因此客户端的 Web 浏览器不会卡住它。
    【解决方案2】:

    我从字符串生成 json 数据的方式是在控制器中使用JavaScriptResult

    public JavaScriptResult jsonList( string jsonString)
    {
       jsonString = "var jsonobject = new Array(" + jsonString + ");";
       return JavaScript(jsonString)
    }
    

    然后,当您请求将 json 字符串传递给控制器​​中的该操作时,结果将是一个带有 javascript 标头的文件。

    【讨论】:

      【解决方案3】:

      我认为您可以为此使用 JavaScriptSerializer 类

      var js = new System.Web.Script.Serialization.JavaScriptSerializer();
      var jsonObject = js.Deserialize("{ 'val': 'apple' }", typeof(object));
      

      【讨论】:

      • 将其序列化为对象是否可行?我认为序列化程序不会向序列化对象添加属性,我认为它只是在对象上查找与 JSON 中的属性匹配的属性。也许你可以试试dynamic
      • 这将反序列化对象,只是为了再次序列化。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 2023-03-18
      • 1970-01-01
      • 2023-04-08
      • 2011-09-05
      相关资源
      最近更新 更多