0
votes

C # liste chacune dans le tableau JSON

Je suis nouveau à cela et j'ai compris une partie de l'analyse JSON.
Ma réponse JSON de l'API ressemble à ceci.

WebClient wc = new WebClient();
var projectUri = "http://xxx/tfs/defaultcollection/_apis/projects?api-version=3.0";
wc.UseDefaultCredentials = true;
string jsonProjectCollection = wc.DownloadString(projectUri);

var project = JsonConvert.DeserializeObject<Project>(jsonProjectCollection);
var projectname = project.value[0].name;
int count = project.count;

Console.WriteLine(count);
Console.WriteLine(projectname);


2 commentaires

Vraisemblablement Project.Value est une liste ou une matrice, utilisez donc foreach (entrée varié dans le projet.Value) etc.


Ajoutez également la classe de projet dans la question


3 Réponses :


0
votes

Nevermind, je ne sais pas ce que je pensais ici, c'est comment. XXX


5 commentaires

Pourquoi utiliser une boucle pour s'appuyer sur une valeur de comptage distincte lorsque vous pouvez simplement utiliser foreach sur projet.value ?


@ Jonskeet - Les deux sont des approches valides. Techniquement, la boucle pour la boucle est plus rapide, alors c'est une raison pour laquelle.


@Sscubasteve: Sans connaître le type de projet.value , vous ne pouvez pas dire ce qui est plus rapide. Au-delà de cela, toute différence de performance est presque certainement sera insignifiante et j'encouragerais vivement l'OP à écrire le code le plus simple qui fonctionne pour commencer - ce qui est beaucoup plus susceptible d'être un foreach boucle.


@Jonskeet - Oui, mais c'est un exemple, nous ne connaissons pas l'utilisation finale. Cela pourrait fonctionner sur n rangées. De plus, A pour la boucle est la première année CS, il n'est guère plus complexe qu'un pour chacun. Vous pourriez discuter d'un pour chacun est plus complexe, car il y a plus de choses sous le capot.


@Sscubasteve: Il y a plus de choses sur le capot, mais c'est un code plus simple à lire. C'est pourquoi c'est dans la langue de commencer. L'indice ici n'est qu'un détail de mise en œuvre - à moins que cela soit utilisé à des fins autres que "d'arriver à chaque entrée", je me contenterais que foreach décrit l'intention du code plus clairement qu'un pour boucle.



0
votes

Pour moi, cela a plus de sens et est plus utile de désérialiser et de conserver la structure d'objet. L'objet intérieur est une matrice JSON. Vous pouvez utiliser la classe JSON.NET JARRAY pour stocker ce qui est de la valeur intérieure.

https://www.newtonsoft.com/json/help/html/t_newtonsoft_json_linq_jarray.htm p>

donc, désérialiser -> Tirez le tableau hors de la structure d'objet -> Itéréter à travers ledit tableau. P>

for(int i = 0; i < project.count; i++)
{
    Console.WriteLine(project.value[i].name);
}


0 commentaires

0
votes
var projectCollection = JsonConvert.DeserializeObject<Project>(jsonProjectCollection);
var projects= projectCollection.value;
int count = projectCollection .count;
foreach(var project in projects)
{
   Console.WriteLine(project.name);
}
Console.WriteLine(count);
Console.WriteLine(projectname);

0 commentaires