Looping attraverso l'array JSON e aggiunta di elementi all'elenco C #
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
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
}
}
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();