Не может использовать JSON с SSIS - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь использовать 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

Но не уверен, как заставить его работать без каждого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...