通过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部分以查看示例。
答
问题是你的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
,虽然您仍然需要检查空值,但它没有拼错您要查找的属性的危险。
使用调试器..并检查你的循环使用'我'的值'i ++; – MethodMan
很难说没有看到jsonObj,但我的猜测是它只有一个员工。调试器说什么? –
我不喜欢这里。 你的foreach是循环......但不能看到你的json对象是如何定义的。 。 – AntDC