10

包含以下原始Jsonstring数据(为了问题而简化):

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

我怎样才能创建一个JsonResult代表的对象MyString

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

"{ 'val': 'apple' }"

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

{ 'val': 'apple' }

这就是我想要实现的目标

4

3 回答 3

24

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

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 具有安全隐患,在您在自己的应用程序中允许这样做之前,您应该注意这一点。

于 2010-10-21T21:07:14.097 回答
1

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

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

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

于 2010-10-21T21:01:20.420 回答
0

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

var js = new System.Web.Script.Serialization.JavaScriptSerializer();
var jsonObject = js.Deserialize("{ 'val': 'apple' }", typeof(object));
于 2010-10-21T20:54:00.827 回答