2013-03-27 20 views
0

你好我使用JSON的firsttime在asp.net在asp.net中序列化爲JSON?

我有我的WebMethod這樣

   [WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public static string Vo_Get(string Action,int ID) 
{ 
    Product p= new Product(); 

    DataSet ds= new DataSet(); 

    p.Action = Action; 
    p.ID= ID; 

    ds= VoGet_Get(obj); 

    **string jsonVesselDetails = JsonConvert.SerializeObject(ds, Formatting.None); 
    return jsonVesselDetails;** 
} 

這裏IAM讓我的結果作爲

 [ 
    { 
    "Pinky": 1, 
    "Ponky": "Breakwater Dockk", 

    }, 
    { 
    "Pinky": 2, 
    "Ponky": "Watson Island Dock",  
    }, 

但是當我試圖用調用Ajax並附加到表中它給予Unexpexted Token U如果我嘗試綁定結果並給出意想不到的標記O如果我嘗試綁定result.data

終於讓我找到問題是系列化,

我的Ajax調用是

    $.ajax({ 
       type: "POST", 
       contentType: "application/json; charset=utf-8", 
       url: "Voyage.aspx/Vo_Get", 
       data: "{'Action':'Get','ID':'68'}", 
       dataType: "json", 
       success: function (data) { 
        try { 
         alert("getdata! success"); 

         Get(data); 

        } catch (ex) { 
         alert(ex); 
        } 
       }, 
       error: function (msg) { 
        alert("err: " + error); 
       } 
      }); 

+0

指定DateFormathandling看到螢火蟲的響應,它可能會導致類似d的東西。因爲安全原因,Coz,asp.net圍繞json結果「d」,這是一種jsonp(帶有Padding的JSON)類型 – 2013-03-27 09:34:15

回答

0

也許您在成功功能中也使用了相同的變量data。 嘗試使用以下,

success: function (result) { 
    try { 
     alert("getdata! success"); 

     GetVessels(result); 

     //Rebuild the table 
     //BuildVesselTaggerInfo(); 

    } catch (ex) { 
     alert(ex); 
    } 
}, 

注意,我已經從數據改變導致。

0

我不知道是什麼GetVessels期待,但嘗試:

GetVessels(data.d); 

即通實際數據而不是整個響應對象。

+0

是的,當我給這些也它不工作,它的給出錯誤 – 2013-03-27 11:28:39

0

首先驗證你的GetVessles方法期望什麼樣的JSON或陣列結構。

您可以通過直接提供VoyageVessel_Get方法的JSON響應或手動構建它。即

var data= [ 
{ 
     "TerminalID": 1, 
     "TerminalName": "Breakwater Dockk", 
     "PortID": 1, 
     "PortName": "Swire Pacific Offshore", 
     "Column1": "08/03/13", 
     "Column2": "16/03/13", 
     "ServiceID": 2 
    }, 
    { 
     "TerminalID": 2, 
     "TerminalName": "Watson Island Dock", 
     "PortID": 2, 
     "PortName": "Keppel Offshore", 
     "Column1": "20/03/13", 
     "Column2": "23/03/13", 
     "ServiceID": 2 
    }]; 

    GetVessels(data); 

看看你的GetVessels是否適合這個對象。如果它不知道它需要什麼結構(只有你可以做到這一點),並構建它。

其次,您不能直接訪問ASP.NET Web-Service:success的響應。

訪問這樣的:

success: function (data) { 
      var jsonData= data.d; 
      GetVessels(jsonData); 
} 

更新

,如果你的對象包括日期時間字段的嘗試在Serialization

JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings 
      { 
       DateFormatHandling = DateFormatHandling.MicrosoftDateFormat 
      }; 
string serializedObject= Newtonsoft.Json 
        .JsonConvert 
        .SerializeObject(dsVoyages, microsoftDateFormatSettings); 
+0

我的WebMethod序列化正確格式...,我希望必須改變,因爲我有問題 – 2013-03-27 11:30:12

+0

是的,它看起來不錯。序列化後你有任何錯誤嗎?我的意思是在迴歸之前?我還會在數據集中看到日期時間字段,嘗試指定DateFormatHandling。等待更新我的代碼 – 2013-03-27 11:38:42