Разбор 2 разных сайтов с информацией JSON в WP7 - PullRequest
0 голосов
/ 07 января 2012

Я застрял в этой проблеме дольше, чем хочу признать.Позвольте мне объяснить, что я хочу сделать.У меня есть веб-сайт, на котором есть несколько аукционов и их данные хранятся в виде файла 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.Надеюсь, это поможет.

1 Ответ

0 голосов
/ 07 января 2012

Ваш вопрос мне не совсем понятен, но вы хотите, чтобы ваш itemID был в URI?

Вы можете сделать это так же, как вы делали аукционы:

public ItemSearch() 
{ 
    InitializeComponent(); 
    WebClient proxy = new WebClient(); 
    proxy.OpenReadCompleted += new OpenReadCompletedEventHandler(get_item_info); 
    proxy.OpenReadAsync(new Uri("http://www.example.com/i/" + auction.itemID.ToString() + "/json")); 
} 

если проблема заключается в получении itemID в обратном вызове, который используется для анализа конкретного элемента, вы можете использовать eventargs e, чтобы получить uri и отфильтровать идентификатор из него

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...