2013-08-15 9 views
36

コードでJSONデータを返す方法がわかりません。ASP.NET&jQueryで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); 
     } 
    }); 
}); 

Default.aspx.cs

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

のC#の事前に感謝します!

+1

なぜWeb APIを使用しないのですか? –

+2

'JavaScriptSerializer'クラスを試してみてください。 –

+0

この質問を見て:http://stackoverflow.com/questions/8405458/return-json-data-from-asmx-web-service基本的には、JSON文字列を返す必要があり、そのためには、 JavaScriptSerializerを使用してC#オブジェクト/リストをjson文字列にシリアル化します。あなたは遠くない。 – frenchie

答えて

37

ます」遠くない。

[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はすぐに使えます。

+5

これを '静的メソッド'の上に ' JavaScriptSerializer' '[ScriptMethod(UseHttpGet = true、ResponseFormat = ResponseFormat.Json)] ' –

+1

ここにあるとされる' MyCustomJson'とは何ですか?あなたは例へのリンクを提供できますか?私はどのくらい手作業によるコーディングがあるクラスで必要になるのだろうかと思っています。 –

+1

カスタムコンバータがない場合、シリアライザはC#オブジェクトを同じプロパティ名のjsonにシリアル化/逆シリアル化します。しかし、あなたのjavascriptオブジェクトをC#オブジェクトと異なるものにしたい場合、または逆シリアル化するときにいくつかのバリデーションルールを含めるには、カスタムコンバーターが必要です。ここで私がそれについて尋ねたいくつかの質問があります:http://stackoverflow.com/questions/4998595/serializing-only-parts-of-an-object-with-json http://stackoverflow.com/questions/10193024/nested- json-custom-converter-in-c-sharp-with-javascriptconverter – frenchie

2

Asp.netは.netオブジェクトを自動的にjsonに変換するのにはかなり良いです。あなたのwebmethodで返されたListオブジェクトは、json/javascript配列を返します。つまり、メソッドからデータを返すときに戻り値の型を文字列に変更しないでください(クライアントが期待していると思いますので)。 Webメソッドから.net配列を返すと、JavaScript配列がクライアントに返されます。複雑なオブジェクトでは実際にはあまりうまく機能しませんが、単純な配列データではうまく機能しません。

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

私はこのような何かを考え、次のようになります。あなたのデータは、単純な行/ COLデータよりも複雑である場合を除き、実際に任意のカスタム・コンバータを初期化する必要があるべきではありません

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

-6

これを使用しようと、それは私のために完璧に動作

// 

    varb = new List<object>(); 

// Example 

    varb.Add(new[] { float.Parse(GridView1.Rows[1].Cells[2].Text)}); 

// JSON + Serializ 

public string Json() 
     { 
      return (new JavaScriptSerializer()).Serialize(varb); 
     } 


// Jquery SIDE 

    var datasets = { 
      "Products": { 
       label: "Products", 
       data: <%= getJson() %> 
      } 
5

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

コントローラ:AJAX呼び出しで

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

私はこのようなデータにアクセスします。

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

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

public Object Get(string id) 
{ 
    return new { id = 1234 }; 
} 
+0

非常に短いと甘い!いい案。 –

関連する問題