2014-08-30 51 views
1

我有一個相對較大的asp.net應用程序(大約1600個Web表單,其中10%是大型和/或複雜的),使用.NET 2.0和I需要將其升級到.NET 4.0(和4.5,一旦我們放棄對WinXP的支持)。如何在.NET中禁用JSON響應中的「d」包裝4

我添加了一些我需要的新.NET 4.0庫,並且像魅力一樣工作;然後在測試另一種形式我注意到,那些使用網絡服務,其中失敗,因爲現在所有的AJAX(JSON)要求現在就來纏「d」參數內:

{ d: { 
     myStatus:'', 
     myData: [1, 2, 3], 
     myInfo:{a:1, b:false} 
    } 
} 

閱讀有關過了一會兒,我明白這是.NET 3.5中的一個安全補充,但它打破了我們許多使用Web服務的應用程序形式。這些Web服務(Web頁面方式)是在形式後面的代碼,並期待這樣的:

<Services.WebMethod(enableSession:=True)> _ 
Public Shared Function getSomeData() As Generic.Dictionary(Of String, Object) 
    Dim myResponse As New Generic.Dictionary(Of String, Object) 
    myResponse.Add("isOK", true) 
    myResponse.Add("howMuch", 37.5) 
    myResponse.Add("someList", new String(){"a", "b"}) 
    Return myResponse 
End Function 

在我的應用程序,我們使用簡單的調用與HttpRequest的形式瀏覽器調用Web服務的‘老’的代碼基礎,後者我們開始使用jQuery來讓這些調用拋出jquery.ajax函數,所以我們無法找到每個Ajax調用(「裸」並使用jquery),以便「修復」.NET 4中生成的響應更改應用程序中的每個Web服務。直到我可以解決這個問題,我堅持.NET 2.

所以,我的問題是如何配置我的ASP.NET/.NET 4 Web應用程序(在web.config中?),使Web的JSON響應服務(這是自動序列化)不會生成「d」包裝,但「舊式」數據結構?

+0

不錯的問題,我搜索了一下找到一個解決方案,但是......不,似乎沒有一個配置來覆蓋這個重大變化。顯然現在你遇到了麻煩,因爲你將重構每一次.ajax的重現(在你的.aspx,.ascx,.js等等,正如本文中的推薦http://encosia.com/never-worry-about- asp-net-ajaxs-d-again/ – InferOn 2014-08-30 22:43:08

+0

是的,我遇到了麻煩,部分原因是因爲我在.Net的時候沒有升級我的項目......部分原因是因爲M $認爲每個開發人員都使用ASP.Net ajax序列化/反序列化:'( – Roimer 2014-08-31 23:42:04

回答

1

這是否有助於..在jQuery包含之後直接添加此轉換器設置以使用「d」過濾json結果。

$.ajaxSetup({ 
     converters: { 
      "text json": function (str) { 
       var json = $.parseJSON(str); 
       if (json && json.hasOwnProperty("d")) json = json.d; 
       return json; 
      } 
     } 
    }); 
+0

)感謝邁克爾,我害怕這將是我最後的選擇:(現在我不知道有多少代碼使得沒有jQuery的AJAX調用(jQuery也被用於很多形式我的項目) – Roimer 2014-08-31 23:34:50

+1

...和三年後,我結束了這樣做:我使用'$ ajaxSetup'並修改了非jQuery的調用(主要是,不知道是否我錯過了任何:p)再次感謝! – Roimer 2017-12-10 16:57:58