web-dev-qa-db-fra.com

comment travailler avec un objet json en c #

Je travaille avec un json qui provient d'une API, voici ce dont je parle:

{
  "popularity": 3.518962,
  "production_companies": [
    {
      "name": "value1",
      "id": 4
    },
    {
      "name": "value2",
      "id": 562
    },
    {
      "name": "value13",
      "id": 14654
    },
    {
      "name": "value4",
      "id": 19177
    },
    {
      "name": "value5",
      "id": 23243
    }
  ]
}

Je peux déjà retourner la valeur de popularity

A titre d'exemple, j'ai besoin de savoir comment accéder à la valeur name et à quelle name il s'agit.

J'ai également essayé de le convertir en tableau, mais cela n'a pas fonctionné ou j'ai commis une erreur.

Classe de film:

public class Movie {

    public string popularity {get; set;}
    public object production_companies {get; set;}

    public Movie GetBasic(string id) {
        string json = @"{
                      "popularity": 3.518962,
                      "production_companies": [
                        {
                          "name": "value1",
                          "id": 4
                        },
                        {
                          "name": "value2",
                          "id": 562
                        },
                        {
                          "name": "value13",
                          "id": 14654
                        },
                        {
                          "name": "value4",
                          "id": 19177
                        },
                        {
                          "name": "value5",
                          "id": 23243
                        }
                      ]
                    }";

        Movie Data = JsonConvert.DeserializeObject<Movie>(json);

        return Data;

}

Ce que j'ai fait jusqu'à présent:

@{
  var arr = Item.production_companies.ToString().Substring(1, (Item.production_companies.ToString().Length - 2)).ToArray();
  foreach(var a in arr) {
    @a.name
  }
}
7
Hooman

Après avoir obtenu une chaîne JSON, vous devez la désérialiser. Utilisez ce site pour générer votre modèle.

http://json2csharp.com/

vous aurez des cours comme

public class ProductionCompany
{
    public string name { get; set; }
    public int id { get; set; }
}

public class RootObject
{
    public double popularity { get; set; }
    public List<ProductionCompany> production_companies { get; set; }
}

alors vous pouvez appeler 

var json = "...yout json string..."
RootObject obj = JsonConvert.DeserializeObject<RootObject >(json);

et vous pouvez utiliser les données récupérées facilement

14
Grappachu

Définissez d'abord les classes comme ci-dessous:

public class ProductionCompany
{
    public string name { get; set; }
    public int id { get; set; }
}

public class Item
{
    public double popularity { get; set; }
    public List<ProductionCompany> production_companies { get; set; }
}

Vous pouvez ensuite utiliser jsonSerializer pour convertir votre JSON en objet de classe. 

    string jsonInput="your Json string"; 

    JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
    Item item= jsonSerializer.Deserialize<Item>(jsonInput)

Maintenant, vos données peuvent facilement être récupérées à partir d'un élément d'objet, quelque chose comme ceci 

  foreach (var productioncompany in item.Production_Companies)
    {
       productioncompany.Name;  
       productioncompany.id;
    }
3
Maverick

Le moyen le plus simple consiste à créer une classe qui correspond à votre JSON, à désérialiser le JSON, puis à accéder aux propriétés via l'objet créé.

Par exemple: 

public class Companies(){
  public double Popularity { get; set; }
  public List<ProductionCompany> Production_Companies { get;set; }

  public Companies(){
    Production_Companies  = new List<ProductionCompany>();
  }
}

public class ProductionCompany(){
   public string Name {get;set;}
   public int Id {get;set;}
}

Ensuite, vous désérialisez avec JSON.Net

  var myObject = JsonConvert.DeserializeObject<Companies>(jsonString);

Et accéder aux propriétés 

foreach (var company in myObject.Production_Companies)
{
   company.Name;  //do something...
}
0
Bojan B