C# 尝试为数据库设定种子时索引超出范围

C# 尝试为数据库设定种子时索引超出范围,c#,entity-framework-6,httpwebrequest,httpwebresponse,C#,Entity Framework 6,Httpwebrequest,Httpwebresponse,发生了什么: string[] symbols = Resources.Fixed_lines.Split(' '); int stockId = 1; foreach(var symbol in symbols) { var stockData = GetStockDataFromSymbol(symbol); if (stockData != null) { var json = JObject.Parse(stockData);

发生了什么:

string[] symbols = Resources.Fixed_lines.Split(' ');

int stockId = 1;

foreach(var symbol in symbols)
{
    var stockData = GetStockDataFromSymbol(symbol);

    if (stockData != null)
    {
        var json = JObject.Parse(stockData);

        var stock = new Company()
        {
            StockId = stockId,
            Name = json["datatable"]["data"][0][1].ToString(),
            Description = json["datatable"]["data"][0][0].ToString(),
            Symbol = symbol
        };

        _context.Stocks.Add(stock);
        stockId++;
    } else
    {
        continue;
    }
}
_context.SaveChanges();
当我运行
updatedatabase
时,我试图在数据库中植入公司详细信息。然而,由于某种原因,我无法理解,当我的
Seed
helper方法的一个助手返回
null
时,该方法中的代码似乎会忽略


我在做什么:

string[] symbols = Resources.Fixed_lines.Split(' ');

int stockId = 1;

foreach(var symbol in symbols)
{
    var stockData = GetStockDataFromSymbol(symbol);

    if (stockData != null)
    {
        var json = JObject.Parse(stockData);

        var stock = new Company()
        {
            StockId = stockId,
            Name = json["datatable"]["data"][0][1].ToString(),
            Description = json["datatable"]["data"][0][0].ToString(),
            Symbol = symbol
        };

        _context.Stocks.Add(stock);
        stockId++;
    } else
    {
        continue;
    }
}
_context.SaveChanges();
想法相当简单:

使用一组标识符对文件进行迭代,并向API发送
HttpWebRequest
,以使用标识符获取详细信息。然后解析对
公司
对象的响应

但是,如果API中不存在一个标识符(如果
Request.StatusCode!=HttpStatusCode.Ok
),我将返回
null
。或者如果周围的
try-catch
失败,我将返回
null

应该注意,我知道列表中的第一个标识符返回一个非OK状态码


问题:

string[] symbols = Resources.Fixed_lines.Split(' ');

int stockId = 1;

foreach(var symbol in symbols)
{
    var stockData = GetStockDataFromSymbol(symbol);

    if (stockData != null)
    {
        var json = JObject.Parse(stockData);

        var stock = new Company()
        {
            StockId = stockId,
            Name = json["datatable"]["data"][0][1].ToString(),
            Description = json["datatable"]["data"][0][0].ToString(),
            Symbol = symbol
        };

        _context.Stocks.Add(stock);
        stockId++;
    } else
    {
        continue;
    }
}
_context.SaveChanges();
调用代码(下面的第一个片段)中从未捕获到
null
,因此它似乎在试图解析空的
JObject
,这给了我以下错误消息:

索引超出范围。必须为非负数且小于 收藏。参数名称:索引

呼叫代码:

string[] symbols = Resources.Fixed_lines.Split(' ');

int stockId = 1;

foreach(var symbol in symbols)
{
    var stockData = GetStockDataFromSymbol(symbol);

    if (stockData != null)
    {
        var json = JObject.Parse(stockData);

        var stock = new Company()
        {
            StockId = stockId,
            Name = json["datatable"]["data"][0][1].ToString(),
            Description = json["datatable"]["data"][0][0].ToString(),
            Symbol = symbol
        };

        _context.Stocks.Add(stock);
        stockId++;
    } else
    {
        continue;
    }
}
_context.SaveChanges();
HttpWebRequest
帮助程序:

private string GetStockDataFromSymbol(string symbol)
{
    try
    {
        string url = string.Format("https://www.quandl.com/api/v3/datatables/ZACKS/CP.json?" +
                "qopts.columns[]=comp_desc&qopts.columns[]=comp_name&ticker={0}" +
                "&api_key=myApiKey", symbol);
        Debug.WriteLine(url);
        HttpWebRequest request = (HttpWebRequest)WebRequest.
            Create(url);
        request.Method = "Get";
        request.KeepAlive = true;
        request.ContentType = "application/json";

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        if (response.StatusCode != HttpStatusCode.OK)
        {
            return null;
        }

        string responseBody = string.Empty;
        using (System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream()))
        {
            responseBody = sr.ReadToEnd();
        }

        return responseBody;
    }
    catch (Exception ex)
    {

        return null;
    }
}

?不确定这是否真的对我有帮助。我似乎面临的问题更多的是,调用代码中似乎找不到null,即使它应该由被调用代码返回。您有一些硬编码索引,如
json[“datatable”][“data”][0][1]
。错误是,即使
stockData
json
都不为空,但您引用的索引之一不存在。在
var stock=new Company()
上设置断点,并检查
json
的值?不确定这是否真的对我有帮助。我似乎面临的问题更多的是,调用代码中似乎找不到null,即使它应该由被调用代码返回。您有一些硬编码索引,如
json[“datatable”][“data”][0][1]
。错误是,即使
stockData
json
都不为空,但您引用的索引之一不存在。在
var stock=new Company()
上设置断点,并检查
json
的值。