|
Yahoo! Web Services Request and AjaxPro JSON Parser - I love it! -- MichaelSchwarz --
Attached you will find the .NET 2.0 demo project. Regards, Michael On 7/11/06, Michael Schwarz <michael.schwarz> wrote: Yesterday night I build an example on how to use Yahoo! Web Services with the AjaxPro JSON parser. The example will call a Yahoo! Web Service with output type set to JSON (see http://developer.yahoo.com/common/json.html ). The response will bedeserialized to an .NET structure using the AjaxPro JSON parser (from the stand-alone version or the build-in parser in Ajax.NET Professional). First of all I have to get the response from the Web Service using the WebRequest class: string query = "Madonna"; // demo search for "Madonna" int count = 5; WebRequest request = WebRequest.Create( " http://api.search.yahoo.com/ImageSearchService/V1/imageSearch?appid=YahooDemo&query ="+ query + "&results=" + count + "&output=json" ); request.Credentials = CredentialCache.DefaultCredentials; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = reader.ReadToEnd(); reader.Close(); dataStream.Close(); response.Close(); Now, I have to deserialize the JSON response string to an .NET data type. I can simply generate an IJavaScriptObject from the JSON string and go to all properties. But today I'd like to get a real .NET class. I had a look on the result XML schema and build my own structures that will represent the results from the Yahoo! Web Service: struct YahooResponse { public YahooResultSet ResultSet; } struct YahooResultSet { public string totalResultsAvailable; public int totalResultsReturned; public int firstResultPosition; public YahooResult Result; } struct YahooResult { public string Title; public string Summary; public string Url; public string ClickUrl; public string RefererUrl; public string FileSize; public string FileFormat; public string Height; public string Width; public YahooThumbnail Thumbnail; } struct YahooThumbnail { public string Url; public string Height; public string Width; } The next line will create a YahooResponse object from the JSON string... YahooResponse r = JavaScriptDeserializer.DeserializeFromJson<YahooResponse>(responseFromServer); ...and allowes me to go through the result set with .NET data types. What do you think? Console.WriteLine(r.ResultSet.totalResultsAvailable + " Results"); foreach (YahooResult s in r.ResultSet.Result) { Console.WriteLine("\t ** " + s.Title); Console.WriteLine("\t format: " + s.FileFormat); Console.WriteLine("\t size: " + s.Width + " x " + s.Height); } Note: Did you noticed the generic DeserializeFromJson method which is new to the current release? -- Best regards | Schöne Grüße Michael Microsoft MVP - Most Valuable Professional Microsoft MCAD - Certified Application Developer http://weblogs.asp.net/mschwarz /http://www.schwarz-interactive.de /mailto:info -- Best regards | Schöne Grüße Michael Microsoft MVP - Most Valuable Professional Microsoft MCAD - Certified Application Developer http://weblogs.asp.net/mschwarz /http://www.schwarz-interactive.de /mailto:info |