ASP.Net MVC:如何基于原始Json数据创建JsonResult

问题描述 投票:10回答:3

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

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

如何创建代表JsonResultMyString对象?

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

"{ 'val': 'apple' }"

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

{ 'val': 'apple' }

这就是我想要实现的目标:

asp.net-mvc json serialization jsonresult
3个回答
22
投票

Json()上的Controller方法实际上是一种帮助方法,可以创建一个新的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开始,如果用户发出HTTP GET请求(而不是POST),JsonResult也会抛出异常。允许用户使用HTTP GET检索JSON具有security implications,在您在自己的应用程序中允许之前应该注意这一点。


1
投票

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

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

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


0
投票

我认为你可以使用JavaScriptSerializer类

var js = new System.Web.Script.Serialization.JavaScriptSerializer();
var jsonObject = js.Deserialize("{ 'val': 'apple' }", typeof(object));
© www.soinside.com 2019 - 2024. All rights reserved.