Я создаю пользовательский интерфейс, в котором пользователь вводит символ/тикер акции и нажимает кнопку, чтобы получить данные об акции, такие как цена открытия, максимум, минимум и цена закрытия. Я использую все это через API Alpha Vantage. Эта ссылка показывает данные JSON вызова API, который я использую в этом вопросе ежедневно за последние 100 дней на акциях Microsoft. Чтобы получить каждый из последних 100 рабочих дней (или дней недели: с понедельника по пятницу) с сегодняшнего дня, я использую этот код C#:
Код: Выделить всё
public List GetDatesBetween(DateTime start, DateTime end, params DayOfWeek[] weekdays)
{
bool allDays = weekdays == null || !weekdays.Any();
var dates = Enumerable.Range(0, 1 + end.Subtract(start).Days)
.Select(offset => start.AddDays(offset))
.Where(d => allDays || weekdays.Contains(d.DayOfWeek))
.ToList();
return dates;
}
А затем я перебираю значения списка функции GetDatesBetween(), передавая правильно отформатированные даты в метод JObject.Parse() для получения JSON из запроса GET клиента RestSharp:
Код: Выделить всё
using RestSharp;
using Newtonsoft.Json.Linq;
using FluentDateTime;
var client = new RestClient(String.Format("https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol={0}&apikey={1}",
TextBox89.Text, "MY_API_KEY"));
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
List lst = GetDatesBetween(DateTime.Now.SubtractBusinessDays(100), DateTime.Now,
DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday, DayOfWeek.Thursday, DayOfWeek.Friday);
foreach (var date in lst)
{
var open = JObject.Parse(response.Content)["Time Series (Daily)"][date.ToString("yyyy-MM-dd")]["1. open"];
}
За исключением того, что я продолжаю получать сообщение «System.NullReferenceException: ссылка на объект не установлена на экземпляр объекта» для этой строки:
Код: Выделить всё
var open = JObject.Parse(response.Content)["Time Series (Daily)"][date.ToString("yyyy-MM-dd")]["1. open"];
Я проверил вывод кода date.ToString("гггг-ММ-дд"), и он аналогичен формату JSON из Alpha Vantage, например, сегодняшнее время "2020-01-12". Я также попробовал ввести строку даты, и это сработало:
Код: Выделить всё
var open = JObject.Parse(response.Content)["Time Series (Daily)"]["2020-01-10"]["1. open"];
Что я делаю не так? Есть ли какая-то синтаксическая проблема со строкой? Извините, если эта сложная проблема кажется не по теме, но я был бы очень признателен за помощь, поскольку в последнее время это меня очень расстраивает. Чтобы помочь мне решить эту проблему, перейдите по ссылке выше в формате JSON.
Подробнее здесь:
https://stackoverflow.com/questions/597 ... ct-referen