2017-04-12 553 views
-1

我有一個從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

回答

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,雖然您仍然需要檢查空值,但它沒有拼錯您要查找的屬性的危險。

相關問題