Я пытаюсь использовать JSON с компонентом сценария в службах SSIS. Я пытаюсь получить данные отсюда: https://api.opendota.com/api/teams
К сожалению, после того, как я выполню пакет, он дает мне только первую строку данных.
#region Class
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
/// <summary>Outputs records to the output buffer</summary>
public override void CreateNewOutputRows()
{
//Set Webservice URL
string wUrl = "https://api.opendota.com/api/teams?json";
try
{
RootObject[] Teams = GetWebServiceResult(wUrl);
//For each group of metrics output records
foreach (var metric in Teams)
{
Output0Buffer.AddRow();
Output0Buffer.teamid = metric.team_id;
Output0Buffer.rating = metric.rating;
Output0Buffer.wins = metric.wins;
Output0Buffer.losses = metric.losses;
Output0Buffer.lastmatchtime = metric.last_match_time;
Output0Buffer.name = metric.name;
Output0Buffer.tag = metric.tag;
Output0Buffer.logourl = metric.logo_url;
}
}
catch (Exception e)
{
FailComponent(e.ToString());
}
}
/// <summary>
/// Method to return our WorkGroupMetric array
/// </summary>
/// <param name="wUrl">The web service URL to call</param>
/// <returns>An array of WorkGroupMetric composed of the de-serialized JSON</returns>
private RootObject[] GetWebServiceResult(string wUrl)
{
HttpWebRequest httpWReq = (HttpWebRequest)WebRequest.Create(wUrl);
HttpWebResponse httpWResp = (HttpWebResponse)httpWReq.GetResponse();
RootObject[] jsonResponse = null;
try
{
//Test the connection
if (httpWResp.StatusCode == HttpStatusCode.OK)
{
Stream responseStream = httpWResp.GetResponseStream();
string jsonString = null;
//Set jsonString using a stream reader
using (StreamReader reader = new StreamReader(responseStream))
{
jsonString = reader.ReadToEnd();
reader.Close();
}
//Deserialize our JSON
JavaScriptSerializer sr = new JavaScriptSerializer();
jsonResponse = sr.Deserialize<RootObject[]>(jsonString);
}
//Output connection error message
else
{
FailComponent(httpWResp.StatusCode.ToString());
}
}
//Output JSON parsing error
catch (Exception e)
{
FailComponent(e.ToString());
}
return jsonResponse;
}
/// <summary>
/// Outputs error message
/// </summary>
/// <param name="errorMsg">Full error text</param>
private void FailComponent(string errorMsg)
{
bool fail = false;
IDTSComponentMetaData100 compMetadata = this.ComponentMetaData;
compMetadata.FireError(1, "Error Getting Data From Webservice!", errorMsg, "", 0, out fail);
}
}
#endregion
#region JSON Class
//Class to hold data
public class RootObject
{
public int team_id { get; set; }
public double rating { get; set; }
public int wins { get; set; }
public int losses { get; set; }
public int last_match_time { get; set; }
public string name { get; set; }
public string tag { get; set; }
public string logo_url { get; set; }
}
#endregion
Единственное, о чем я могу думать, это то, что JSON начинается, заканчивается, заканчивается на [], бот, я действительно не уверен.
Единственный ответ, который я нашел о подобной проблеме, был такой:
На самом деле я заставил его работать. Проблема была не в JSON или классе, а в том, что при каждом вызове возвращалась только одна запись. Я просто избавился от цикла For Each и эй presto
Но не уверен, как заставить его работать без каждого.