2

De serialized JSON レスポンスの値をさまざまな出力に返そうとしていますが、それらを出力しようとすると、RootObject 属性しか表示されません。

SSIS スクリプト コンポーネントで、次の出力を作成しました。 SSIS スクリプト コンポーネントの出力

以下のクラスを宣言しました。

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;

    } 

ただし、アプリケーションの出力バッファに書き込もうとすると、Success と Response しか表示されません。(文字列への応答も出力できませんが、これは8000文字を超えるためだと思います)

各アプリケーションの値を設定しようとすると、これが表示されます。出力値の設定

foreachステートメントで次のエラーが発生します。

「'ScriptMain.Response' には 'GetEnumerator' のパブリック定義が含まれていないため、foreach ステートメントはタイプ 'ScriptMain.Response' の変数を操作できません」

助けてください!これは私を狂わせています!私は何を間違っていますか?

4

2 に答える 2

1

繰り返したいのは次のとおりだと思いますResponse.Applications

foreach (Application app in outPutResponse.Response.Applications)
{
    ApplicationBuffer.AddRow();
    ApplicationBuffer.AppID = app.App_ID;
}
于 2016-11-11T03:53:30.580 に答える
1

また、

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

そして別の部分は、すべてのアプリケーションが必要なためoutPutResponse.response.Applications、 foreach ループにある必要があります

そして最後に

ApplicationBuffer.AppID = app.App_ID; 
于 2016-11-11T03:53:50.457 に答える