web-dev-qa-db-fra.com

Comment retourner un objet JSon

J'utilise un plugin jQuery nécessitant un objet JSON avec la structure suivante (je vais récupérer les valeurs de la base de données):

{ results: [
    { id: "1", value: "ABC", info: "ABC" },
    { id: "2", value: "JKL", info: "JKL" },
    { id: "3", value: "XYZ", info: "XYZ" }
] }

Voici ma classe:

public class results
{
    int _id;
    string _value;
    string _info;

    public int id
    {
        get
        {
            return _id;
        }
        set
        {
            _id = value;
        }
    }
    public string value
    {
        get
        {
            return _value;
        }
        set
        {
            _value = value;
        }
    }
    public string info
    {
        get
        {
            return _info;
        }
        set
        {
            _info = value;
        }
    }
}

Voici comment je le sérialise:

results result = new results();
result.id = 1;
result.value = "ABC";
result.info = "ABC";
string json = JsonConvert.SerializeObject(result);

Mais cela ne renverra qu'une ligne. Pouvez-vous s'il vous plaît m'aider à renvoyer plus d'un résultat? Comment puis-je obtenir le résultat dans le format spécifié ci-dessus?

23
user1640256

Tout d'abord, il y a aucun objet JSON . Ce que vous avez dans votre question est un littéral d'objet JavaScript (voir ici pour une grande discussion sur la différence). Voici comment procéder pour sérialiser ce que vous avez dans JSON:

Je voudrais utiliser un type anonyme rempli avec votre type results:

string json = JsonConvert.SerializeObject(new
{
    results = new List<Result>()
    {
        new Result { id = 1, value = "ABC", info = "ABC" },
        new Result { id = 2, value = "JKL", info = "JKL" }
    }
});

Notez également que le JSON généré contient des éléments de résultat avec ids de type Number au lieu de chaînes. Je doute que ce soit un problème, mais il serait assez facile de changer le type de id en string dans le C #.

Je voudrais aussi Tweak votre results tapez et se débarrasser des champs de sauvegarde:

public class Result
{
    public int id { get ;set; }
    public string value { get; set; }
    public string info { get; set; }
}

De plus, les classes sont classiquement PascalCased et non pas camelCased.

Voici le JSON généré à partir du code ci-dessus:

{
  "results": [
    {
      "id": 1,
      "value": "ABC",
      "info": "ABC"
    },
    {
      "id": 2,
      "value": "JKL",
      "info": "JKL"
    }
  ]
}
29
Andrew Whitaker

Vous n'avez qu'une seule ligne à sérialiser. Essayez quelque chose comme ça:

List<results> resultRows = new List<results>

resultRows.Add(new results{id = 1, value="ABC", info="ABC"});
resultRows.Add(new results{id = 2, value="XYZ", info="XYZ"});

string json = JavaScriptSerializer.Serialize(new { results = resultRows});
  • Modifier pour correspondre à la sortie JSON d'origine de l'OP

** Edit 2: désolé, mais il me manquait qu'il utilisait JSON.NET. En utilisant JavaScriptSerializer, le code ci-dessus produit ce résultat:

{"results":[{"id":1,"value":"ABC","info":"ABC"},{"id":2,"value":"XYZ","info":"XYZ"}]}
5
ShaneBlake