在asp.net中序列化为JSON

本文关键字:JSON 序列化 asp net | 更新日期: 2023-09-27 18:06:08

我第一次在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;**
}

在这里我得到我的结果

       [
  {
    "Pinky": 1,
    "Ponky": "Breakwater Dockk",
  },
  {
    "Pinky": 2,
    "Ponky": "Watson Island Dock",    
  },

但是当我尝试使用Ajax调用并追加到表时,如果我尝试与结果绑定,它会给出意外令牌U,如果我尝试与result.data绑定,它会给出意外令牌O

最后我发现问题是与序列化,

我的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);
                }
            });

在asp.net中序列化为JSON

可能您也在成功函数中使用相同的变量data。尝试使用以下命令

success: function (result) {
   try {
        alert("getdata! success" );
        GetVessels(result);
        //Rebuild the table
        //BuildVesselTaggerInfo();
   } catch (ex) {
        alert(ex);
   }
},

注意,我已经把数据改为结果。

我不知道getvessel期待什么,但尝试:

GetVessels(data.d);

。传递实际数据,而不是整个响应对象。

首先验证您的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);