2016-11-11 161 views
2

我想將我的De序列化JSON響應中的值返回給不同的輸出,但是當我去輸出它們時,我只能看到RootObject屬性。Deserilized Json字符串到多個輸出

在SSIS腳本組件我已經創建瞭如下輸出 SSIS Script Component Outputs

我已經宣佈了以下類。

public class Application 
{ 
    public int App_ID { get; set; } 
    public string App_Ref { get; set; } 
    public string Status { get; set; } 
    public string Error_Code { get; set; } 
    public string Error_Message { get; set; } 
    public string Create_Dt { get; set; } 
    public string Modify_Dt { get; set; } 
    public string Client_Name { get; set; } 
    public string Client_Code { get; set; } 
    public string Centrelink_Status { get; set; } 

} 
public class Response 
{ 
    public List<Application> Applications { get; set; } 
    public string Current_Dt { get; set; } 
    public string Last_App_Dt { get; set; } 
    public int Count { get; set; } 
    public int Total { get; set; } 
} 

public class RootObject 
{ 
    public bool Success { get; set; } 
    public Response Response { get; set; } 

} 

我原始的Json響應看起來像這樣。

{ 
    "Success": true, 
    "Response": { 
    "Applications": [ 
     { 
     "App_ID": 1638486, 
     "App_Ref": "Test Example", 
     "Status": "Complete", 
     "Error_Code": null, 
     "Error_Message": null, 
     "Create_Dt": "2014-05-14 03:09:01.030 +00:00", 
     "Modify_Dt": "2014-05-14 03:10:59.757 +00:00", 
     "Client_Name": "Silver Chef", 
     "Client_Code": "SLVC01", 
     "Centrelink_Status": "Receiving_Logons" 
     }, 
     { 
     "App_ID": 1637906, 
     "App_Ref": "SME Demo", 
     "Status": "Complete", 
     "Error_Code": null, 
     "Error_Message": null, 
     "Create_Dt": "2015-10-08 03:07:26.793 +00:00", 
     "Modify_Dt": "2015-10-08 03:23:32.833 +00:00", 
     "Client_Name": "Silver Chef", 
     "Client_Code": "SLVC01", 
     "Centrelink_Status": "Receiving_Logons" 
     }, 
     { 
     "App_ID": 1585286, 
     "App_Ref": "Test", 
     "Status": "Receiving_Logons", 
     "Error_Code": null, 
     "Error_Message": null, 
     "Create_Dt": "2015-12-04 03:12:49.617 +00:00", 
     "Modify_Dt": "2015-12-04 03:12:49.617 +00:00", 
     "Client_Name": "Silver Chef", 
     "Client_Code": "SLVC01", 
     "Centrelink_Status": "Receiving_Logons" 
     }, 
     { 
     "App_ID": 1585398, 
     "App_Ref": "Test", 
     "Status": "Receiving_Logons", 
     "Error_Code": null, 
     "Error_Message": null, 
     "Create_Dt": "2015-12-04 03:27:59.023 +00:00", 
     "Modify_Dt": "2015-12-04 03:27:59.023 +00:00", 
     "Client_Name": "Silver Chef", 
     "Client_Code": "SLVC01", 
     "Centrelink_Status": "Receiving_Logons" 
     }, 
     { 
     "App_ID": 1585400, 
     "App_Ref": "Test", 
     "Status": "Receiving_Logons", 
     "Error_Code": null, 
     "Error_Message": null, 
     "Create_Dt": "2015-12-04 03:28:22.903 +00:00", 
     "Modify_Dt": "2015-12-04 03:28:22.903 +00:00", 
     "Client_Name": "Silver Chef", 
     "Client_Code": "SLVC01", 
     "Centrelink_Status": "Receiving_Logons" 
     } 
], 
    "Current_Dt": "2016-11-11 01:01:01.743 +00:00", 
    "Last_App_Dt": "2016-10-03 22:48:56.397 +00:00", 
    "Count": 500, 
    "Total": 1870 
    } 
} 

該方法已用於發送和接收響應是這樣的,它似乎是反序列化沒有錯誤。我可以輸出「成功」屬性。

private RootObject GetWebServiceResult(string vAPIUrl) 
    { 

     string vAPIToken = Variables.APIToken; 

     //Create Web Request 
     HttpWebRequest apireq = (HttpWebRequest)WebRequest.Create(vAPIUrl); 
     apireq.ContentType = "application/json"; 
     apireq.Method = "POST"; 

     string jsonPostStr = "{\"Settings\": {\"API_Token\": \"" + vAPIToken + "\"}, \"Payload\": {}}"; 
     byte[] postString = Encoding.UTF8.GetBytes(jsonPostStr); 

     apireq.ContentLength = postString.Length; 

     Stream jsonStream = apireq.GetRequestStream(); 

     jsonStream.Write(postString, 0, postString.Length); 
     jsonStream.Close(); 

     // Get Web Response   
     HttpWebResponse apirsp = (HttpWebResponse)apireq.GetResponse(); 
     RootObject jsonResponse = null; 

     Stream jsonRspStream = apirsp.GetResponseStream(); 
     string apiResponseString = null; 

     using (StreamReader reader = new StreamReader(jsonRspStream)) 
     { 
      apiResponseString = reader.ReadToEnd(); 
      Console.WriteLine(apiResponseString); 
      reader.Close(); 
     } 


     JavaScriptSerializer returnJson = new JavaScriptSerializer(); 

     //var serialJsonStr = returnJson.Serialize(apiResponseString); 
     System.Windows.Forms.MessageBox.Show(apiResponseString); 

     jsonResponse = returnJson.Deserialize<RootObject>(apiResponseString); 

     return jsonResponse; 

    } 

但是,當我嘗試寫入應用程序輸出緩衝區返回我只看到成功和響應。 (不能輸出字符串響應,但認爲這是因爲它超過8000個字符)

當我嘗試設置每個應用程序的值時,我看到了這一點。 setting output values

我在我的foreach語句中出現以下錯誤。

「foreach語句無法在類型 'ScriptMain.Response' 的變量操作,因爲 'ScriptMain.Response' 不包含 '的GetEnumerator' 一個 公共定義」

請幫幫忙!這讓我瘋狂!我究竟做錯了什麼?

+1

您的'Response'對象不是列舉的'List'。如果你想循環Application對象,你需要去'outPutResponse.Response.Applications'。否則一切看起來不錯。 – Searching

+0

請僅添加代碼 – Rahul

+1

Rahul的必要/相關部分,我認爲我發佈的所有內容都與我遇到的錯誤相關。 –

回答

1

我想你想遍歷是什麼Response.Applications

foreach (Application app in outPutResponse.Response.Applications) 
{ 
    ApplicationBuffer.AddRow(); 
    ApplicationBuffer.AppID = app.App_ID; 
} 
+0

我能夠從響應中輸出「Success」bool,但我無法從響應中取回任何其他內容,因爲我正在獲取未設置爲對象實例的** _「對象引用。」_ **當我嘗試並執行以下操作時出錯。 –

1

您也可以對

public class RootObject 
{ 
    public bool Success { get; set; } 
    public Response response { get; set; } 
        ^
} 

一看,另一部分是因爲你希望所有的應用程序應該是outPutResponse.response.Applications in the foreach loop

and lastly

ApplicationBuffer.AppID = app.App_ID;