Я застрял в этой проблеме дольше, чем хочу признать.Позвольте мне объяснить, что я хочу сделать.У меня есть веб-сайт, на котором есть несколько аукционов и их данные хранятся в виде файла JSON.Я уже понял, как анализировать данные JSON с помощью десериализатора JSON.net.Теперь мне нужно взять данные, которые я анализирую, из этого аукционного списка, а затем получить более подробную информацию с другого веб-сайта, используя идентификатор элемента # на каждом из аукционов.Вот что у меня есть:
public AuctionSearch()
{
InitializeComponent();
WebClient proxy = new WebClient();
proxy.OpenReadCompleted += new OpenReadCompletedEventHandler(get_auction_info);
proxy.OpenReadAsync(new Uri("http://www.example.com/auctions/"));
}
void get_auction_info(object sender, OpenReadCompletedEventArgs e)
{
Stream stream = e.Result;
StreamReader sr = sr.ReadToEnd();
var root = JsonConvert.DeserializeObject<AuctionListing>(result);
}
Вот классы, которые я сейчас использую для хранения информации об аукционе:
public class AuctionListing
{
public long auctionID { get; set; }
public string itemName { get; set; }
public long itemID { get; set; }
public string owner { get; set; }
public long bid { get; set; }
public long buyout { get; set; }
public long quantity { get; set; }
public string timeLeft { get; set; }
}
Теперь вот моя проблема.Я пытаюсь использовать идентификатор элемента #, полученный из этого анализа JSON, и получить имя элемента с другого веб-сайта, на котором будет отображаться имя элемента и куча другой информации об элементе.URL будет выглядеть примерно так: http://www.newexample.com/i/%itemID%/json, и тогда мне придется анализировать информацию.После того, как я проанализировал его, у меня возникла проблема с получением имени, которое будет соответствовать остальной информации о товаре для каждого аукциона.У меня в основном те же функции, что и выше, но разбор в другой класс (конечно).Я надеюсь, что дал достаточно информации о том, что я пытаюсь сделать, чтобы кто-то помог мне.Если мне нужно выложить мой полный код здесь, я могу, но это довольно долго.Я думаю, что моя проблема связана с тем, как работает OpenReadAsync, но я не уверен.Дайте мне знать, если у вас есть другие вопросы.
Разъяснение
Я понимаю, как получить название предмета.Моя проблема в том, что я хочу хранить всю информацию из обоих парсетов.Ниже мой исходный код.Я объясню, что произойдет после этого.
(continuation of the code from above)
void get_auction_info(object sender, OpenReadCompletedEventArgs e)
{
(stuff from above)
for (int i = 0; i < root[i].Length; i++)
{
WebClient client = new WebClient();
client.OpenReadCompleted += new OpenReadCompletedEventHandler(auction_information);
client.OpenReadAsync(new Uri("http://www.newexample.com/i/" + root[i].itemID + "/json"));
TextBlock tb = new Textblock();
tb.Text = (
"Auction ID #: " + root[i].auctionID +
"\nItem ID: " + root[i].itemID + "\n\n"
);
tb.TextWrapping = TextWrapping.NoWrap;
TextPanel.Children.Add(tb);
}
}
void aucton_information(object sender, OpenReadCompletedEventArgs e)
{
Stream stream = e.Result;
StreamReader itemStreamReader = new StreamReader(stream);
string theResult = itemStreamReader.ReadToEnd();
var secondRoot = JsonConvert.DeserializeObject<AuctionInfo>(theResult);
stream.Close();
itemStreamReader.Close();
}
Теперь моя проблема заключается в следующем.Когда я вызываю второй URL-адрес из аукциона-информации OpenReadAsync, он не работает так, как я ожидал.То, что я хотел бы сделать, это иметь возможность получить имя элемента из данного itemID, а затем установить его в качестве переменной для itemName.Я не понимаю, как я собираюсь вернуть имя элемента, которое я только что получил во втором анализе JSON, и установить его в качестве значения itemID в корневом объекте из первого вызова JSON.Надеюсь, это поможет.