gpt4 book ai didi

c# - 将 Json 字符串反序列化为多个输出

转载 作者:行者123 更新时间:2023-11-30 23:18:57 25 4
gpt4 key购买 nike

我试图将我的反序列化 JSON 响应中的值返回到不同的输出,但是当我去输出它们时,我只看到 RootObject 属性。

在 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 statement cannot operate on variables of type 'ScriptMain.Response' because 'ScriptMain.Response' does not contain a public definition for 'GetEnumerator'"

求助!这让我发疯!我做错了什么?

最佳答案

我想你想要迭代的是Response.Applications:

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

关于c# - 将 Json 字符串反序列化为多个输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40540806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com