有一个string
包含以下原始Json数据(为了问题简化):
var MyString = "{ 'val': 'apple' }";
如何创建代表JsonResult
的MyString
对象?
我试图使用Json(对象)方法。但它将原始json数据作为字符串处理 - 逻辑:P-。所以返回的HTTP响应如下所示:
"{ 'val': 'apple' }"
而不是给定的原始Json数据:
{ 'val': 'apple' }
这就是我想要实现的目标:
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,在您在自己的应用程序中允许之前应该注意这一点。
我从字符串生成json数据的方法是在控制器中使用JavaScriptResult
:
public JavaScriptResult jsonList( string jsonString)
{
jsonString = "var jsonobject = new Array(" + jsonString + ");";
return JavaScript(jsonString)
}
然后,当您请求将json字符串传递给控制器中的该操作时,结果将是一个带有javascript标头的文件。
我认为你可以使用JavaScriptSerializer类
var js = new System.Web.Script.Serialization.JavaScriptSerializer();
var jsonObject = js.Deserialize("{ 'val': 'apple' }", typeof(object));