2013-10-23 149 views
4

我是C#開發人員和Javascript中的newbi。 我有一個C#對象,最後,在index.cshtml,我可以通過調用獲得從對象轉換的字符串Json.Encode(OBJ)將C#對象轉換爲JSON或Javascript對象

該字符串是:

[ 
    { 
    "Name":"CASE_A", 
    "Values":[99.8,99.9,99.9,99.8,99.8,96.3,22.3] 
    }, 
    { 
    "Name":"CASE_B", 
    "Values":[99.8,99.8,99.8,96.3,22.3] 
    }, 
] 

然而,當我調用JSON.parse(@TheString),我得到:

Uncaught SyntaxError: Unexpected token & 

此錯誤的位置顯示我:

data = JSON.parse([{"Name":"CASE_A","Values":[99.8,99.9,99.9,99.8 .... 

我該如何解決這個問題?


謝謝你的答案! 但我仍得到了一個錯誤:

Uncaught SyntaxError: Unexpected token o 

對於簡單的測試,我用這個:

@{ 
    string tmp = "[{\"Name\":\"CASE_A\",\"Values\":[99.8,99.9,98.6]},{\"Name\":\"CASE_B\",\"Values\":[96.7,11.1]}]"; 
} 
var data1 = JSON.parse(@Html.Raw(@tmp)); 

和源顯示了該行:

var data1 = JSON.parse([{"Name":"CASE_A","Values":[99.8,99.9,98.6]},{"Name":"CASE_B","Values":[96.7,11.1]}]); 

我看不到任何 「O」這裏。


另外,爲了製作javascript對象,Travis建議在序列化之前刪除鍵名。但在C#中,所有對象都必須具有其成員名稱。我能想到的只是字符串操作。有沒有更好的方法來做到這一點?

+0

理想情況下,如果我能得到沒有鍵名的javascipt對象會好得多。例如[[CASE_A,[[99.8,99.9,99.9,99.8,99.8,96.3,22.3],...] – Daebarkee

+1

這應該在你序列化之前完成。 –

+1

我實際上並沒有因爲另一個錯誤而發現這個錯誤:「Uncaught SyntaxError:Unexpected token o」。但是,而不是json對象,我使用了一個JavaScript對象,並使用「data = eval(@ Html.Raw(TheString))」。它成功了。 – Daebarkee

回答

13

Razor會自動轉義HTML實體,以幫助您。你可以用Html.Raw禁用此:

JSON.parse(@Html.Raw(TheString)) 
+0

謝謝p.s.w.g.我在拉胡爾和你之間想知道,但似乎更多人喜歡你明確的答案。 – Daebarkee

+0

@Daebarkee謝謝,但請記住,您通常應該接受您最能完全回答您的問題或解決您的問題的答案,這不一定是最受歡迎的問題。另請參見[答案被「接受」時的含義是什麼?](http://stackoverflow.com/help/accepted-answer) –

1

使用該字符串將導致剃刀保護您免受注射。如果你傳遞json的機會,那不是問題。常見的做法是使用Html.Raw幫手

data = JSON.parse(@(Html.Raw(TheString))); 
3

你可以試試這個使用HtmlHelper.Raw method: -

data = JSON.parse(@Html.Raw(TheString)); 

還檢查了DataContractJsonSerializer Class

Serializes objects to the JavaScript Object Notation (JSON) and deserializes JSON data to objects. This class cannot be inherited.

+0

謝謝拉胡爾。但我仍然有一個問題。請查看更新後的問題。 – Daebarkee

3

對於你的第二個錯誤,JSON .parse期望一個字符串,但是你傳遞一個ar射線。你輸出的js代碼有看起來像這樣的工作:

var data1 = JSON.parse("[{\"Name\":\"CASE_A\",\"Values\":[99.8,99.9,98.6]},{\"Name\":\"CASE_B\",\"Values\":[96.7,11.1]}]"); 

我也想指出,既然你是注入該對象到服務器端JavaScript代碼,就沒有必要調用JSON.parse在所有。只要您將格式正確的JavaScript發送到將在其中進行評估和運行的客戶端,那麼它在服務器上的創建方式並不重要。試試這個:

var data1 = @Html.Raw(@tmp); 
0

OP的解決方案也適用於我。

data = eval(JSON.parse(@Html.Raw(TheString)))