0

こんにちは、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を使用して呼び出し、結果とバインドしようとすると予期しないトークン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);
                }
            });

4

3 に答える 3

0

GetVesselsが何を期待しているのかわかりませんが、試してみてください。

GetVessels(data.d);

つまり、応答オブジェクト全体ではなく、実際のデータを渡します。

于 2013-03-27T09:31:27.153 に答える
0

data成功関数でも同じ変数を使用している可能性があります。以下を使用してみてください、

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

        GetVessels(result);

        //Rebuild the table
        //BuildVesselTaggerInfo();

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

データから結果に変更したことに注意してください。

于 2013-03-27T09:40:10.773 に答える
0

まず、メソッドが期待する種類JSONまたは配列構造を確認します。GetVessles

メソッドのJSON応答を直接フィードするVoyageVessel_Getか、手動で作成することで、これを行うことができます。すなわち

 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このオブジェクトで動作するかどうかを確認してください。それが必要な構造を見つけられない場合(あなただけがそれを行うことができます)、それを構築します。

:success次に、 inの応答に直接アクセスすることはできませんASP.NET Web-Service

次のようにアクセスします。

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

アップデート

Serializationオブジェクトが日時フィールドで構成されている場合は、 ieでDateFormathandlingを指定してみてください

JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings
            {
                DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
            };
string serializedObject= Newtonsoft.Json
                     .JsonConvert
                     .SerializeObject(dsVoyages, microsoftDateFormatSettings);
于 2013-03-27T09:48:59.247 に答える