通过JArray的Foreach循环只返回第一个值

问题描述:

我有一个从Web服务调用返回的JSON数组。我最终试图将所有雇员数据插入到SQL数据库中,但是如果我现在可以将它写入控制台,我相信我可以将其余部分解决。我的数组返回了几百条员工记录,但是当我运行循环尝试打印每个员工的最后一个中间时,我只获取返回的第一条员工记录。任何人有任何想法如何解决我的问题?这里是我的代码:通过JArray的Foreach循环只返回第一个值

var i = 0; 
foreach (var employee in jsonObj) 
{ 
    var firstName = jsonObj["workers"][i]["person"]["legalName"]["givenName"].ToString(); 
    var middleName = jsonObj["workers"][i]["person"]["legalName"]["middleName"].ToString(); 
    var familyName = jsonObj["workers"][i]["person"]["legalName"]["familyName1"].ToString(); 
    Console.WriteLine(firstName + " " + middleName + " " + familyName); 
    i += 1; 
} 

编辑:不是复制/粘贴整个JSON模式,我会链接到它 - ADP Worker V2 schema。您需要扩展GET/hr/v2/workers部分以查看示例。

+0

使用调试器..并检查你的循环使用'我'的值'i ++; – MethodMan

+0

很难说没有看到jsonObj,但我的猜测是它只有一个员工。调试器说什么? –

+2

我不喜欢这里。 你的foreach是循环......但不能看到你的json对象是如何定义的。 。 – AntDC

问题是你的jsonObj不是员工的集合,因此你不能使用foreach就可以得到预期的结果。由于您的实际架构是非常复杂的,这里有一个关于如何用foreach循环更简化类获取数据的例子:

static void Main(string[] args) 
{ 
    Company company = // Whatever you do to retrieve your company 
    foreach (var employee in company.Employees) 
    { 
     Console.WriteLine(employee.Person.Name); 
    } 
} 

public class Company 
{ 
    public List<Employee> Employees { get; set; } 
} 

public class Employee 
{ 
    public int DepartmentId { get; set; } 
    public Person Person { get; set; } 
} 

public class Person 
{ 
    public string Name { get; set; } 
} 

正如你所看到的,Company类有员工的列表。您可以使用foreach,因为您正在查看一个列表,这是一个集合。另一个好的做法是使用点符号,即employee.Person.Name,虽然您仍然需要检查空值,但它没有拼错您要查找的属性的危险。