Looping attraverso l'array JSON e aggiunta di elementi all'elenco C #

Oct 22 2020

Scusa per la domanda di base, sono un principiante e ho provato a trovare il mio problema, ma non ci sono riuscito

string json = "{\"EmailList\":[{\"name\":\"John Bravo\",\"email\":\"[email protected]\"},{\"name\":\"Daniel Alutcher\",\"email\":\"[email protected]\"},{\"name\":\"James Rodriguez\",\"email\":\"[email protected]\"}]}";

JObject rss = JObject.Parse(json);

var data = JsonConvert.DeserializeObject<dynamic>(json);

dynamic emails = data.EmailList;

List<string> emailList = new List<string>();

foreach (dynamic item in emails)
{
    int x = 0;
    if (item.email != null)
    {
        Console.WriteLine(item.email);
        //emailList.Add(item.email); // throws exception System.Collections.Generic.List<string>.Add(string)' has some invalid arguments' 
    }
}

Quindi sto eseguendo il loop attraverso questo JSON e sono in grado di accedere alla console ogni e-mail, ma quando provo ad aggiungerlo a un elenco, viene generato un errore di eccezione

Risposte

MihirDave Oct 22 2020 at 20:56

Stai cercando di aggiungere dynamicin List<string>invece si dovrebbe fare

emailList.Add(item.email.ToString()); 

Codice:

string json =
"{\"EmailList\":[{\"name\":\"John Bravo\",\"email\":\"[email protected]\"},{\"name\":\"Daniel Alutcher\",\"email\":\"[email protected]\"},{\"name\":\"James Rodriguez\",\"email\":\"[email protected]\"}]}";


JObject rss = JObject.Parse(json);

var data = JsonConvert.DeserializeObject<dynamic>(json);

dynamic emails = data.EmailList;

List<string> emailList = new List<string>();

foreach (dynamic item in emails)
{
    int x = 0;
    if (item.email != null)
    {
        Console.WriteLine(item.email);
        emailList.Add(item.email.ToString()); // Change here 
   }
}
DragandDrop Oct 22 2020 at 21:58

Come hai commentato "C'è un modo per evitare" dinamico "in questo codice?" .

Beh, c'è ed è piuttosto semplice, è una semplice copia del passato!
In Visual Studio utilizzando il passato speciale nel menu della barra superiore ( immagine ).
O in uno strumento online come app.quicktype.io o json2csharp.com .

using  Newtonsoft.Json;

public partial class JsonData //Give it a better name
{
       [JsonProperty("EmailList")] public List<EmailInformation> EmailList { get; set; }
}

public partial class EmailInformation
{
       [JsonProperty("name")]  public string Name { get; set; } 
       [JsonProperty("email")] public string Email { get; set; }
}

E anche l'utilizzo è abbastanza semplice e ne hai già la maggior parte nel codice:

var data = JsonConvert.DeserializeObject<JsonData>(json);

foreach(var mailInfo  in data.EmailList){
       Console.WriteLine($"{mailInfo.Name} <{mailInfo.Email}>;");
}

//here a list of string 
var emails = data.EmailList.Select(x=> x.Email).ToList();