Foreach遍历JArray只返回第一个值

时间:2017-04-12 14:29:47

标签: c# json

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

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部分以查看示例。

1 个答案:

答案 0 :(得分:0)

问题是您的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,它没有拼写你正在寻找的属性的危险,尽管你仍然需要检查空值。