2014-09-10 32 views
0

所有JSON字符串,我需要映射從服務器接收到一個特定的Javascript對象

我有以下代碼:

$.ajax({ 
    url: '@Url.Action("GetMerchantUsers", "Merchant")', 
    dataType: 'json', 
    success: function (json) { 
     var mappedTasks = $.map(JSON.parse(json), function (item) { return new Task(item) }); 
     self.tasks(mappedTasks); 
    } 
}); 

這需要一個MVC控制器,從返回的對象列表一個JsonResult方法。它工作得很好。但是,我需要重寫此方法,因爲永遠不會有多個從服務器返回的任務。但是,當我從服務器返回一個任務時,.NET JsonResult方法不會在JSON的開始和結尾處放置'['和']',因此$ .map()將該對象的PROPERTIES視爲集合,但我只想將從服務器返回的一個對象映射到可觀察任務,而不是多任務到可觀察任務。我是新來的淘汰賽......我如何映射單個Json對象,就像我爲集合做的那樣。如果需要,我很樂意提供更多信息!另外,我已經將該對象映射到一個通用的JavaScript類型,但我想將其映射到我的Task類型。

+0

VAR分析= JSON.parse(JSON); parsed = typeof parsed ==「數組」? parsed:[parsed]; – 2014-09-10 19:44:34

+0

Chris,這解析爲一個通用對象。我想要一個Task類型的對象。 – Killingsworth 2014-09-10 19:46:02

+0

點擊輸入太快。基本上,測試它是否是數組,如果不是,則將其添加到空數組中,然後調用您的地圖 – 2014-09-10 19:47:18

回答

2

既然你不再處理列表,你不需要$.map()(因爲它只是遍歷並以列表適用的功能,每一個項目),你可以通過解析JSON效應初探您Task構造......像這樣也許:

var mappedTasks = new Task(JSON.parse(json)); 

如果您self.tasks()方法需要一個列表,你可以把它包裝:

self.tasks([mappedTasks]); 
相關問題