Я пытаюсь использовать онлайн-API для извлечения данных на основе кода UPC, а затем преобразования его в объект. Одним из их методов является получение данных в формате JSON.Использование SearchUPC API и преобразование результата строки в JSON
В результате вы получите выглядит так:
{
"0": {
"productname": "Play-doh Single Can by Hasbro",
"imageurl": "http://ecx.images-amazon.com/images/I/31ZzLhzYDEL._SL160_.jpg",
"producturl": "",
"price": "10.01",
"currency": "GBP",
"saleprice": "",
"storename": "N/A"
},
"1": {
"productname": "PLAY-DOH Compound Tropical Pink - Two, 5 oz Cans (10 oz)",
"imageurl": "http://ecx.images-amazon.com/images/I/51LbjiXtEjL._SL160_.jpg",
"producturl": "",
"price": "37.07",
"currency": "GBP",
"saleprice": "",
"storename": "N/A"
}
}
Я использую .NET C# 4.5.2 в 8.1 приложения. Я пытаюсь использовать HttpClient, но я все время получаю странные результаты, как будто JSON не отформатирован правильно. Я плюхнулся в онлайн-редактор Json, и все выглядит отлично, поэтому я не уверен, в чем проблема. Код, который я запускаю, довольно прост. Похоже на это.
public async Task<string> GetUpc(string upcCode)
{
var url = "http://www.searchupc.com/handlers/";
var result = string.Empty;
using (HttpClient client = new HttpClient())
{
// client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync("http://www.searchupc.com/handlers/upcsearch.ashx?request_type=3&access_token=MY_TOKEN&upc=0653569289791");
result = await response.Content.ReadAsStringAsync();
//JToken token = await Task.Run(() => JObject.Parse(reader.ReadLine()));
//string name = (string)token.SelectToken("productname");
JsonSerializer s = new JsonSerializer();
var i = JsonConvert.DeserializeObject<dynamic>(result);
}
return result;
}
Когда я проверяю «i», это просто строковое представление результата API. Я также попытался использовать JsonConvert.DeserializeObject и передал ему строку, но он все же просто возвращает объект, который имеет строковое представление снова и снова. Это похоже, что он знает, что это объект json, но формат неправильный.
Единственное решение, которое я выяснил до сих пор, это использовать JObject.Parse как токен, а затем использовать SelectToken для перемещения по дереву.
Любые идеи, что делать? Решение не кажется правильным.
Perfect Спасибо. Теперь, когда вы это говорите, становится совершенно понятным! Я просто взял этот словарь после этого и сделал цикл, чтобы сделать его регулярным списком, и все настроено. Еще раз спасибо! – gcoleman0828