2010-10-21 55 views
9

有一個string包含以下原料JSON數據(爲簡化問題的緣故)創建JsonResult:ASP.Net MVC:如何根據原始JSON數據

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

我怎樣才能創建一個JsonResult代表MyString的對象?

我試圖使用Json(object)方法。但它將原始JSON數據處理爲一個字符串 - 邏輯上:P-。所以返回的HTTP響應的樣子:

"{ 'val': 'apple' }" 

,而不是用給定的JSON數據:

{ 'val': 'apple' } 

這是我想達到什麼:

回答

21

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,在您允許在自己的應用程序中使用它之前,您應該知道這些。

+2

+1 - 但根據http://json.org,鍵和值需要用雙引號括起來而不是單個。 – 2010-10-21 21:11:04

+0

好的。我只複製了提問者使用的字符串。當然,這整個答案假定你知道你的JSON字符串是有效的,因此客戶端的Web瀏覽器不會窒息。 – 2010-10-21 21:18:35

+0

謝謝你,勃蘭特。 +1 – SDReyes 2010-10-22 02:58:38

0

我想你可以使用JavaScriptSerializer類爲此

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

將它作爲一個對象序列化的工作?我不認爲序列化器爲序列化對象添加屬性,我認爲它只是尋找匹配JSON屬性的對象屬性。也許你可以嘗試'動態',但? – 2010-10-21 21:00:41

+0

它爲我工作,但我更喜歡布蘭特的想法。 – 2010-10-21 21:13:25

+0

這將反序列化只有已被序列化的對象。 – BJury 2015-07-16 09:05:04

1

方式我已經生成的JSON數據從一個字符串是由控制器中使用JavaScriptResult

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

然後當你請求傳遞JSON字符串在你的控制器動作,結果將是JavaScript的頭文件。