I have a JSON file I am trying to deserialize, but there is a tag inside the items array that's changing, so how can this be specified in the class description, see class description I have now below.
When I deserialize, I get this message: Error in GetRapidAPIDataForSymbols:Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[MarketDataProvider.YahooHistory+RapidAPIItem]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
The JSON:
{
"meta": {
"currency": "EUR",
"symbol": "UZU.DE",
"exchangeName": "GER",
"instrumentType": "EQUITY",
"firstTradeDate": 911462400,
"regularMarketTime": 1604397503,
"gmtoffset": 3600,
"timezone": "CET",
"exchangeTimezoneName": "Europe/Berlin",
"regularMarketPrice": 50.2,
"chartPreviousClose": 51,
"priceHint": 2,
"dataGranularity": "1d",
"range": ""
},
"items": {
"1340002800": {
"date": "18-06-2012",
"open": 19.05,
"high": 19.05,
"low": 19.05,
"close": 19.05,
"adjclose": 16.09
},
"1340089200": {
"date": "19-06-2012",
"open": 19.04,
"high": 19.05,
"low": 19.04,
"close": 19.04,
"adjclose": 16.09
},
"1340175600": {
"date": "20-06-2012",
"open": 19.04,
"high": 19.04,
"low": 19.04,
"close": 19.04,
"adjclose": 16.09
},
"1340262000": {
"date": "21-06-2012",
"open": 19.05,
"high": 19.05,
"low": 19.05,
"close": 19.05,
"adjclose": 16.09
},
"1604397503": {
"date": "03-11-2020",
"open": 50.6,
"high": 50.6,
"low": 50.2,
"close": 50.2,
"adjclose": 50.2
}
},
"error": null
}
My classes:
public class Meta
{
public string currency { get; set; }
public string symbol { get; set; }
public string exchangeName { get; set; }
public string instrumentType { get; set; }
public long? firstTradeDate { get; set; }
public long? regularMarketTime { get; set; }
public int? gmtoffset { get; set; }
public string timezone { get; set; }
public string exchangeTimezoneName { get; set; }
public decimal? regularMarketPrice { get; set; }
public decimal? chartPreviousClose { get; set; }
public decimal? previousClose { get; set; }
public int? scale { get; set; }
public int? priceHint { get; set; }
public string dataGranularity { get; set; }
public string range { get; set; }
}
public class RapidAPIHistoryResponse
{
[XmlElement("meta")]
public Meta meta { get; set; }
[XmlElement("items")]
public List<RapidAPIItem> items { get; set; }
public object error { get; set; }
}
public class RapidAPIItem
{
string dateTag { get; set; }
public YahooPrice item { get; set; }
}
My code:
var client = new RestClient("https://yahoo-finance15.p.rapidapi.com/api/yahoo/hi/history/UZU.DE/1d);
var request = new RestRequest(Method.GET);
request.AddHeader("x-rapidapi-host", "yahoo-finance15.p.rapidapi.com");
request.AddHeader("x-rapidapi-key", StartParameters.RapidAPIKey);
IRestResponse response = client.Execute(request);
YahooHistory.RapidAPIHistoryResponse history = JsonConvert.DeserializeObject<YahooHistory.RapidAPIHistoryResponse>(response.Content);