Asp.net

ASP.NET WebMethod 返回用引號括起來的 JSON

  • May 19, 2014

我有一個帶有 WebMethod 的 asp.net 頁面,可以將 JSON 傳遞回我的 javascript。

波紋管是網路方法:

[WebMethod]
public static string getData(Dictionary<string, string> d) {

   string response = "{ \"firstname\": \"John\", \"lastname\": \"Smith\" }";

   return response;

}

當它返回給客戶端時,它的格式如下:

{ \"d\": \"{ \"firstname\": \"John\", \"lastname\": \"Smith\" }\" }

問題是雙引號將所有內容都包裹在“d”下。我在 web 方法或其他一些不帶引號的返回數據的方法中遺漏了什麼?我真的不想每次都在客戶端上剝離它。我也看過其他沒有發生這種情況的文章。

任何幫助將不勝感激。

我假設你想返回對象的 JSON 表示

{
   firstname:"John",
   lastname:"Smith"
}

但是您的方法簽名正在返回一個字元串。ASP.Net 框架序列化正確地序列化字元串response。換句話說,如果你的功能是

string response = "foo";
return response; 

如果輸出是

{"d":{"foo"}}

恰好response有需要轉義的雙引號。

你顯然只是想得到對象。您有 2 個選擇:-

1)eval在您的javascript中使用將字元串轉換為對象,例如

function onSuccessCallback(retval) {
    var obj = eval(retval.d);
}`

2)或(這是我首選的解決方案)讓您的方法返回一個實際對象,並讓框架的 JSON 序列化為您完成繁重的工作

[WebMethod]
public static object getData(Dictionary<string, string> d) {
   var response = new { firstname = "John", lastname="Smith" };
   return response;
}

您會看到這會產生您可能最初預期的響應(例如 {"d":{"firstname":"John", "lastname":"Smith"}}

引用自:https://stackoverflow.com/questions/2998455