2012-01-07 1 views
0

나는이 문제에 대해 오래 동안 인정받지 못했습니다. 제가하고 싶은 일을 설명하겠습니다. 경매가 많고 JSON 파일로 저장된 데이터가있는 웹 사이트가 있습니다. JSON.net의 디시리얼라이저를 사용하여 JSON 데이터를 구문 분석하는 방법을 이미 알아 냈습니다. 이제 내가해야 할 일은 해당 경매 목록에서 파싱 한 데이터를 가져온 다음 각 경매에서 항목 ID #를 사용하여 다른 웹 사이트에서 자세한 정보를 얻는 것입니다. 여기에 지금WP7에서 JSON 정보가있는 2 개의 다른 웹 사이트를 구문 분석합니다.

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; } 
} 

내 문제입니다 :

여기
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); 
} 

내가 현재 경매 정보를 저장하는 데 사용하고있는 클래스입니다 : 여기에 지금까지 가지고있는 것입니다. 해당 JSON 구문 분석에서 얻은 항목 ID #를 사용하려고 시도하고 항목 이름과 항목에 대한 다른 정보를 표시하는 다른 웹 사이트에서 항목 이름을 가져옵니다. 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(); 
} 

이제 내 문제는 이것입니다. auction_information OpenReadAsync에서 두 번째 URL을 호출하면 예상대로 작동하지 않습니다. 내가 뭘하고 싶은 건지 주어진 itemID에서 항목 이름을 얻을 수있는 다음 itemName에 대한 변수로 설정합니다. 두 번째 JSON 구문 분석에서 가져온 항목 이름을 반환하고 첫 번째 JSON 호출에서 루트 개체의 itemID 값으로 설정하는 방법을 이해할 수 없습니다. 이게 도움이 되길 바란다.

답변

0

귀하의 질문에 분명히 분명하지 않지만 귀하의 itemID를 uri에 갖고 싶습니다.

당신은 당신이 경매를했던 것과 같은 방법으로이 작업을 수행 할 수 있습니다 문제가 당신에있는 EventArgs 전자를 사용할 수있는 특정 항목을 구문 분석하는 데 사용되는 콜백 항목 ID를 얻는 경우

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")); 
} 

uri를 가져오고 그것으로부터 ID를 필터링하십시오.

+0

내 원래의 질문을 명확히 했으므로 도움이되기를 바랍니다. – th3n3wguy

관련 문제