web-dev-qa-db-fra.com

Comment renvoyer JSON avec ASP.NET & jQuery

Je n'arrive pas à comprendre comment je peux renvoyer des données JSON avec mon code.

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 # de Default.aspx.cs

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

Merci d'avance!

37
Developer

Vous n'êtes pas loin vous devez faire quelque chose comme ceci:

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

Vous pouvez réduire davantage ce code mais je l'ai laissé comme ça pour plus de clarté. En fait, vous pourriez même écrire ceci:

return context.GetProducts().ToList();

et cela renverrait une chaîne json. Je préfère être plus explicite parce que j'utilise des convertisseurs personnalisés. Il y a aussi Json.net mais JavaScriptSerializer du framework fonctionne parfaitement.

38
frenchie

Il suffit de retourner un objet: ce sera un analyseur syntaxique au format JSON.

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

Cette structure fonctionne pour moi - je l'ai utilisée dans une petite application de gestion des tâches.

Le controlle:

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

Dans l'appel AJAX), j'accède aux données de la manière suivante:

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

Asp.net sait très bien convertir automatiquement les objets .net en json. Votre objet List, s'il est renvoyé dans votre méthode Web, doit renvoyer un tableau json/javascript. Ce que je veux dire par là, c'est que vous ne devriez pas changer le type de retour en chaîne (car c'est ce que vous pensez que le client attend) lors du retour des données d'une méthode. Si vous renvoyez un tableau .net à partir d'une méthode Web, un tableau javaScript sera renvoyé au client. En réalité, cela ne fonctionne pas très bien pour des objets plus complexes, mais pour des données de tableau simples, tout va bien.

Bien entendu, c’est ensuite à vous de faire ce que vous devez faire côté client.

Je penserais à quelque chose comme ceci:

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

Il ne devrait pas être nécessaire d'initialiser un convertisseur personnalisé à moins que vos données ne soient plus compliquées que de simples données en lignes/colonnes

2
Steve Mc