web-dev-qa-db-ja.com

ASP.NETとjQueryでJSONを返す方法

コードでJSONデータを返す方法を取得できません。

JS

$(function () {
$.ajax({
        type: "POST",
        url: "Default.aspx/GetProducts",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            // How to return data here like a table???  
            $("#Second").text(msg.d);
            //alert(msg.d);
        }
    }); 
});

C#of Default.aspx.cs

[WebMethod]
public static string GetProducts()
{
   var products  = context.GetProducts().ToList();   
   return What do I have to return ????
}

前もって感謝します!

37
Developer

あなたは遠くありません。次のようなことをする必要があります。

[WebMethod]
public static string GetProducts()
{
  // instantiate a serializer
  JavaScriptSerializer TheSerializer = new JavaScriptSerializer();

  //optional: you can create your own custom converter
  TheSerializer.RegisterConverters(new JavaScriptConverter[] {new MyCustomJson()});

  var products = context.GetProducts().ToList();   

  var TheJson = TheSerializer.Serialize(products);

  return TheJson;
}

このコードはさらに減らすことができますが、わかりやすくするためにそのままにしておきました。実際、次のように書くこともできます。

return context.GetProducts().ToList();

そして、これはJSON文字列を返します。カスタムコンバーターを使用しているため、より明示的にすることを好みます。 Json.netもありますが、フレームワークのJavaScriptSerializerはそのまま使用できます。

38
frenchie

オブジェクトを返すだけで、JSONのパーサーになります。

public Object Get(string id)
{
    return new { id = 1234 };
}
13
TimChang

この構造は私のために機能します-私は小さなタスク管理アプリケーションでそれを使用しました。

コントローラー:

public JsonResult taskCount(string fDate)
{
  // do some stuff based on the date

  // totalTasks is a count of the things I need to do today
  // tasksDone is a count of the tasks I actually did
  // pcDone is the percentage of tasks done

  return Json(new {
    totalTasks = totalTasks,
    tasksDone = tasksDone,
    percentDone = pcDone
  });
}

AJAX呼び出しで、次のようにデータにアクセスします。

.done(function (data) {
  // data.totalTasks
  // data.tasksDone
  // data.percentDone
});
5
AnotherOther

Asp.netは、.netオブジェクトをjsonに自動的に変換するのに非常に優れています。 Listメソッドは、webmethodで返される場合、json/javascript配列を返す必要があります。これが意味することは、メソッドからデータを返すときに、戻り値の型を文字列に変更すべきではないということです(これはクライアントが期待していることだからです)。 webmethodから.net配列を返す場合、javaScript配列がクライアントに返されます。実際には、より複雑なオブジェクトにはあまり効果的ではありませんが、単純な配列データには適しています。

もちろん、クライアント側で必要なことを行うのはあなた次第です。

私はこのようなことを考えています:

[WebMethod]
public static List GetProducts()
{
   var products  = context.GetProducts().ToList();   
   return products;
}

データが単純な行/列データよりも複雑でない限り、実際にカスタムコンバーターを初期化する必要はないはずです。

2
Steve Mc