循环通过JSON数组并将项添加到列表C#

循环通过JSON数组并将项添加到列表C#,c#,arrays,json,.net,loops,C#,Arrays,Json,.net,Loops,对不起,基本问题,我是初学者,试图找到我的问题,但没能找到 string json=“{\”EmailList\”:[{\“name\”:\“John Bravo\”,“email\”:\”email@gmail.com\“},{\'name\':\'Daniel Alutcher\',\'email\':\”email@gmail.com\},{“姓名”:“詹姆斯·罗德里格斯\”,“电子邮件\”:”email@gmail.com\"}]}"; JObject rss=JObject.Parse

对不起,基本问题,我是初学者,试图找到我的问题,但没能找到

string json=“{\”EmailList\”:[{\“name\”:\“John Bravo\”,“email\”:\”email@gmail.com\“},{\'name\':\'Daniel Alutcher\',\'email\':\”email@gmail.com\},{“姓名”:“詹姆斯·罗德里格斯\”,“电子邮件\”:”email@gmail.com\"}]}";
JObject rss=JObject.Parse(json);
var data=JsonConvert.DeserializeObject(json);
动态电子邮件=data.EmailList;
List emailList=新列表();
foreach(电子邮件中的动态项)
{
int x=0;
如果(item.email!=null)
{
Console.WriteLine(item.email);
//emailList.Add(item.email);//抛出异常System.Collections.Generic.List.Add(string)'具有一些无效参数'
}
}

所以我循环使用这个JSON,并且我能够在控制台中获取每封电子邮件,但是当我试图将其添加到列表中时,它会抛出异常错误

您试图在
列表
中添加
动态

emailList.Add(item.email.ToString()); 
代码:

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


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 
   }
}
stringjson=
“{\'EmailList\':[{\'name\':\'John Bravo\',\'email\':\”email@gmail.com\“},{\'name\':\'Daniel Alutcher\',\'email\':\”email@gmail.com\},{“姓名”:“詹姆斯·罗德里格斯\”,“电子邮件\”:”email@gmail.com\"}]}";
JObject rss=JObject.Parse(json);
var data=JsonConvert.DeserializeObject(json);
动态电子邮件=data.EmailList;
List emailList=新列表();
foreach(电子邮件中的动态项)
{
int x=0;
如果(item.email!=null)
{
Console.WriteLine(item.email);
emailList.Add(item.email.ToString());//在此处更改
}
}
正如您所评论的“有什么方法可以避免此代码中的“动态”吗?”

是的,这很简单,这是一个简单的复制过去
在Visual Studio中使用顶部栏菜单中的特殊过去()。
或者使用在线工具,如或

使用Newtonsoft.Json;
公共部分类JsonData//给它起个更好的名字
{
[JsonProperty(“EmailList”)]公共列表EmailList{get;set;}
}
公共部分类电子邮件信息
{
[JsonProperty(“name”)]公共字符串名称{get;set;}
[JsonProperty(“电子邮件”)]公共字符串电子邮件{get;set;}
}
而且用法也非常简单,您的代码中已经包含了大部分用法:

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();
var data=JsonConvert.DeserializeObject(json);
foreach(data.EmailList中的var mailInfo){
Console.WriteLine($“{mailInfo.Name};”);
}
//这里有一个字符串列表
var emails=data.EmailList.Select(x=>x.Email.ToList();

list.Add(item.email作为字符串);玩得开心:)@Leron_说_get_back__Monica虽然这将消除异常,但列表中将充满
null
s,因为动态对象本身不是字符串。您可以将整个问题简化为以下代码:
dynamic test=new JValue(“test”);新列表()。添加(测试)strings=test
工作正常。我想知道为什么
.Add((string)item.email)
工作正常,但是
.Add(item.email)
不工作。@LasseV.Karlsen IMO item.email在当前状态下具有动态类型,而不是Add需要的字符串。所以我们需要明确地强制转换它。假设动态中的值可以强制转换为字符串,那么将
动态
添加到
列表
应该可以很好地工作。例如,您可以这样做,并且它可以工作:
string s=item.email
底层对象的类型是
JValue
,但是,当直接赋值给字符串变量时,它会工作,所以我想知道为什么在调用只接受字符串参数的方法时它不允许这样做。我问了一个新问题-@LasseV.Karlsen我没有看到你编辑的关于JValue的评论,现在我和你一样好奇,关注着你提出的问题。谢谢你问这个问题,谢谢!这正是我所需要的:)如果这个JSON作为整个Appsettings JSON的一部分出现在Appsettings中呢?怎么可能将其导入Program.cs?@onlyo,您在Core?上。那么文档将是需要检查的东西。必须读取分层和绑定数组。
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();