2013-11-27 42 views
0

幫助對於新手了,請...序列化; -xJSON麻煩使用.NET的Json

使用jQuery調用.NET的WebAPI做一個GET調用。後端是SQL Server。

在WebAPI中,我使用實體框架來調用存儲過程。

var cat = ent.GetCategories(); 

return Json.Encode(cat); 

這會提取數據,但是回到瀏覽器,數據看起來像這樣,它不會插入到我的下拉列表中。我猜測它與逃避反斜槓有關。我該如何解決?

"[\"Housing\",\"Jobs\",\"For Sale\",\"Community\",\"Services\"]" 

回答

0

jQuery.ajax()這太簡化了。試着像下面

jQuery.ajax({ 
    type: "GET" //or POST, 
    dataType: "json", 
    url: "your url", 
    success: function(data) { 
     //data returns ["Housing","Jobs","For Sale","Community","Services"] 
    } 
}); 

對於simple and nice explanation

通過設置dataType: "json"你告訴jQuery來解析 接收到的數據作爲JSON,所以數據傳送到成功()函數 作爲Javascript數組。

0

問題是,你是雙重序列化的結果。 Web API會爲您進行序列化,因此您無需致電Json.Encode()。而只是讓你的API控制器方法返回cat

+0

最初,我並沒有編碼,我又回到貓。但在瀏覽器端,我收到錯誤消息:「ExceptionMessage」:「'ObjectContent'1'類型無法序列化內容類型'application/json;'的響應主體...所以我試圖像上面那樣對它進行編碼。然後,我沒有得到錯誤消息,但現在返回的結果如上所示,我不能像回常見的那樣在回調中使用返回的數據。不知道這是否重要,但我有我的webAPI函數,如:public dynamic Get(string filter)...做動態返回類型的事情嗎? – nanonerd

+0

好吧,我嘗試了不同的東西,它的工作原理。但是這個電話超級慢(4+秒)。在webApi中,我聲明瞭一個列表列表。使用Entity Framework,我調用store proc,並通過foreach循環運行返回的對象。對於找到的每個項目,我將它添加到「列表」中。然後我返回「列表」(沒有任何直接的json編碼)。這有效,但它超級慢。使用.net webAPI訪問存儲過程以從SQL Server獲取數據,這是使用JQuery獲取數據的不好方法嗎? – nanonerd

+0

如果你從你的API方法返回一個'List ',那麼你應該聲明這個方法的返回類型('IEnumerable '也應該工作)。當類型已知時,我不會使返回類型爲「動態」。序列化一個簡短的字符串列表本身不應該太慢。我一直在Web API代碼中一直這樣做,完全沒有問題。你確定性能問題不在你的存儲過程或你正在做的其他事情嗎? –

0

如果數據返回像"[\"Housing\",\"Jobs\",\"For Sale\",\"Community\",\"Services\"]"是以下你可以填充你的下拉之前做:

var escaped = "[\"Housing\",\"Jobs\",\"For Sale\",\"Community\",\"Services\"]"; 
var result = $("<div />").html(escaped).text(); 

result後,將有以下值"["Housing","Jobs","For Sale","Community","Services"]"

然後就可以調用jQuery解析函數來獲取一個javascript數組,你可以填充你的下拉菜單:

var jsArr = $.parseJSON(result);