J'ai un client HTTP et j'envoie une requête à un serveur. La réponse du serveur est un JSON. Dans ce Json est également un tableau. Je veux afficher les informations du JSON dans la console. J'obtiens toutes les informations du JSON, mais je n'ai pas le tableau affiché dans ma console.
Le JSON ressemble à ceci:
if (Response().IsSuccessStatusCode) { var namesJ= Response().Content.ReadAsAsync<IEnumerable<Names>>().Result; var preNamesJ= await Response().Content.ReadAsAsync<List<PreNames>>(); foreach (var a in namesJ) { Console.WriteLine("Name1: {0}", a.Name1); foreach(var b in preNamesJ) { Console.WriteLine("{0}", b.PreName); } }
Alors maintenant, mon code pour l'instant:
public class PreNames //for Array { public string PreName { get; set; } public string PreName2{ get; set; } } public class Names//for JSON { public string Name1{ get; set; } public string Name2{ get; set; } public string Name3{ get; set; } }
Et mon principal:
{ "Name1": "Karl", "Name2": "Peter", "Name3": "Wilhelm", "PreNames": { "PreName": "Werner", "PreName2": "Josef" } }
Donc, dans la console sont tous les noms affichés, mais pas les prénoms donc je ne peux pas obtenir les prénoms du tableau dans le JSON ...
J'espère que quelqu'un pourra m'aider :)
4 Réponses :
Je n'ai pas la réputation suffisante pour commenter, alors ... je vais essayer.
Modifié après la mise à jour correcte de json dans Answer.
Console.WriteLine($"Name 1: {names.Name1}"); Console.WriteLine($"Prename 1: {names.PreNames.PreName}");
var json = await Response().Content.ReadAsStringAsync(); var names = JsonConvert.DeserializeObject<Names>(json);
public class Names { public string Name1 { get; set; } public string Name2 { get; set; } public string Name3 { get; set; } public PreNames PreNames { get; set; } }
le "name.SurNames? .reName" ne fonctionne pas ... après PreName?, je ne peux pas choisir le PreName
Si vous passez la souris sur le nom de (var nom dans les noms) en mode débogage, vous devriez voir Name1, Name2, Name3 et PreNames. J'ai ajouté le? juste au cas où la valeur (PreNames) est nulle, ce qui semble être le cas. Pourriez-vous s'il vous plaît clarifier quelle est exactement cette partie du JSON original que vous recevez?
quand je passe la souris, je peux voir que dans "json" est la réponse entière, mais "nom" est nul. et le ? est également ajouté
Je viens de voir que vous avez édité le premier json, alors le voici (je vais aussi mettre à jour ma réponse): dotnetfiddle.net/9EG8WK a>
Si votre Json ressemble à:
foreach (var b in a.Prenames) { Console.WriteLine(b.PreName); }
Si les prénoms sont dans les noms, vous devez ajouter un champ Prénoms
dans le Noms
Classe.
public class Names { public string Name1 { get; set; } public string Name2 { get; set; } public string Name3 { get; set; } public PreNames PreNames { get; set; } }
Ensuite, vous pouvez lire les prénoms internes:
{ "Name1": "Karl", "Name2": "Peter", "Name3": "Wilhelm", "PreNames": { "PreName": "Werner", "PreName2": "Josef" } }
Mais je ne suis pas sûr si je comprends votre question.
Ajoutez la propriété PreNames à votre classe Names et ne lisez qu'une seule fois.
public class Names//for JSON { public string Name1{ get; set; } public string Name2{ get; set; } public string Name3{ get; set; } public PreNames PreNames { get; set;} } var namesJ= Response().Content.ReadAsAsync<Names>().Result; Console.WriteLine(namesJ.PreNames.Name);
Une fois que vous avez lu le résultat une fois, vous pouvez accéder aux éléments via l'objet principal
var namesJ= Response().Content.ReadAsAsync<Names>().Result; foreach(var names in namesJ.PreNames) { Console.WriteLine(names.PreName); }
mis à jour Puisque vous avez changé le json et fait de PreNames juste un objet au lieu d'un tableau, accédez simplement à la propriété de l'objet associé.
public class Names//for JSON { public string Name1{ get; set; } public string Name2{ get; set; } public string Name3{ get; set; } public List<PreNames> PreNames { get; set;} }
@ Leonc443, Voici un code fonctionnel
using Newtonsoft.Json; //add this nuget package using System; namespace ConsoleApp { class Program { public static void Main(string[] args) { string json = @"{ 'Name1': 'Karl', 'Name2': 'Peter', 'Name3': 'Wilhelm', 'PreNames': { 'PreName': 'Werner', 'PreName2': 'Josef' } }"; // data received from api var names = JsonConvert.DeserializeObject<Names>(json); Console.WriteLine(names.Name1); // Karl Console.WriteLine(names.Name2); //Peter Console.WriteLine(names.Name3); //Wilhelm Console.WriteLine(names.PreNames.PreName); //Werner Console.WriteLine(names.PreNames.PreName2); // Josef } } public class Names { public string Name1 { get; set; } public string Name2 { get; set; } public string Name3 { get; set; } public PreNames PreNames { get; set; } } public class PreNames { public string PreName { get; set; } public string PreName2 { get; set; } } }
S'il vous plaît laissez-moi savoir si cela aide
ajouter le JSON approprié celui-ci ne semble pas valide
comment je fais ça ? : /
Je suis votre asynchrone principal? Sinon, vous voudrez peut-être supprimer le mot-clé await et ajouter un .Result () à la fin de la ligne. Si tel est le cas, vous devez supprimer le .Result () et ajouter un mot-clé d'attente à droite du "="
la méthode pour le JSON est normale, mais la méthode pour le tableau est Async. aussi pas travaillé
le commentaire sur l'async, .Result () semble correct le json, si c'est exactement ce que vous récupérez n'est pas valide, il devrait être quelque chose comme: {"Name1": "Karl", "Name2": "Peter", "Name3": "Wilhelm", "PreNames": [{"PreName": "Werner"}, {"PreName2": "Josef"}]} Vous ne pouvez pas avoir de tableau d'objets json sans mettre les paires clé / valeur dans { ...}
oui, mais c'est un JSON valide .. C'est la réponse du serveur. Le JSON dans ma question a été écrit à la main et était un exemple. Mon JSON d'origine est valide, mais la syntaxe est égale à mon exemple