Цикл по списку <Objects>в вызове JSON API (CrunchBase) - PullRequest
2 голосов
/ 19 января 2012

Во-первых, чтобы сделать это полезным для тех, кто хочет добраться до этой точки: У меня есть API, который мне нужен для запроса различных точек данных (CrunchBase). Я взял URL-адрес и сгенерировал классы для него с помощью этого инструмента http://json2csharp.com/# (возвращает классы, необходимые для взаимодействия с этим URL-адресом JSON). Далее мне нужно Чтобы воспользоваться этой услугой, введите Скотта Хансельмана для спасения, воспользовавшись его статьей в блоге о том, как это сделать http://www.hanselman.com/blog/NuGetPackageOfTheWeek4DeserializingJSONWithJsonNET.aspx Затем я собрал их вместе и немного поработал, чтобы я мог запросить API CrunchBase для получения части информации. это необходимо. В настоящее время я просто работаю над логикой с консольным приложением, так как позже намереваюсь обернуть это в .dll для использования в слое DAL проекта DataModel, который предоставляет информацию для сайта MVC.

Вопрос: пока это работает, за исключением того, что я не знаю, что мне следует делать, чтобы пройти через субобъекты, возвращаемые из конечной точки JSON. Мой код опубликован как есть для всех, кто хочет увидеть реализацию (я не смог найти ЛЮБОГО примера в сети для вызова CrunchBase API в C #) Этот код комментируется в тех местах, которые я знаю, которые должны иметь некоторый цикл foreach но все примеры, которые я нашел, не работают для меня. Любое направление о том, как это сделать, высоко ценится. Пример или исправление кода будет иметь большое значение для того, чтобы помочь себе и кому-то еще выяснить все остальное самостоятельно. Дополнительный вопрос, можно ли все это сделать в c # или мне нужно использовать что-то еще - если да, то какие ресурсы вы можете порекомендовать для дополнительного последующего изучения?

Конечная точка используется в этом коде является «http://api.crunchbase.com/v/1/company/" + НазваниеКомпания +». JS»Большое спасибо заранее, я пытался долго и упорно, прежде чем спрашивать.

....
using System.Net;
using Newtonsoft.Json;

 namespace CrunchBase
 {
    class Program
    {
       static void Main(string[] args)
       {
           Console.WriteLine("Enter the name of a Company to look up:");
           string CompanyName = Console.ReadLine();

           var client = new WebClient();
           client.Headers.Add("User-Agent", "Nobody"); //my endpoint needs this...
           var response = client.DownloadString(new Uri("http://api.crunchbase.com/v/1/company/" + CompanyName +".js"));

           var j = JsonConvert.DeserializeObject<RootObject>(response);
           var f = JsonConvert.DeserializeObject<FundingRound>(response);
           var i = JsonConvert.DeserializeObject<Investment>(response);

               Console.WriteLine("Company Name: {0}", j.name);
               Console.WriteLine("Web Page: {0}", j.homepage_url);
               Console.WriteLine("Email Adress: {0}", j.email_address);
               Console.WriteLine("CruchBase Page: {0}", j.crunchbase_url);
               Console.WriteLine("Category: {0}", j.category_code);
               Console.WriteLine("Description: {0}", j.description);
               Console.WriteLine("Number of Employees: {0}", j.number_of_employees);
               Console.WriteLine("Year Founded: {0}", j.founded_year);
               // How would the best aproach be to loop through all of the Objects and print their properties?
               // By the way, if you run this it will hang a little bit because the FundingRound object is not 
               // properly implemented at the moment.
               Console.WriteLine("Funding Round Type: {0}", f.round_code);
               Console.WriteLine("Information Source: {0}", f.source_url);
               Console.WriteLine("Description: {0}", f.source_description);
               Console.WriteLine("Raised Amount: {0} {1}", f.raised_currency_code, f.raised_amount);
               // I take it the same technique used to loop  through the above "f" var object 
               // I would use again to loop through to the next nested Investment   object
               // and on down the chain fefore returning right back up....

               Console.ReadLine(); 
       }

       public class Image
       {
           public List<List<object>> available_sizes { get; set; }
           public object attribution { get; set; }
       }

       public class Person
       {
           public string first_name { get; set; }
           public string last_name { get; set; }
           public string permalink { get; set; }
       }

       public class Relationship
       {
           public bool is_past { get; set; }
           public string title { get; set; }
           public Person person { get; set; }
       }

       public class Provider
       {
           public string name { get; set; }
           public string permalink { get; set; }
       }

       public class Providership
       {
           public string title { get; set; }
           public bool is_past { get; set; }
           public Provider provider { get; set; }
       }

       public class FinancialOrg
       {
           public string name { get; set; }
           public string permalink { get; set; }
       }

       public class Person2
       {
           public string first_name { get; set; }
           public string last_name { get; set; }
           public string permalink { get; set; }
       }

       public class Investment
       {
           public object company { get; set; }
           public FinancialOrg financial_org { get; set; }
           public Person2 person { get; set; }
       }

       public class FundingRound
       {
           public string round_code { get; set; }
           public string source_url { get; set; }
           public string source_description { get; set; }
           public double raised_amount { get; set; }
           public string raised_currency_code { get; set; }
           public int funded_year { get; set; }
           public int funded_month { get; set; }
           public int funded_day { get; set; }
           public List<Investment> investments { get; set; }
       }

       public class Office
       {
           public string description { get; set; }
           public string address1 { get; set; }
           public string address2 { get; set; }
           public string zip_code { get; set; }
           public string city { get; set; }
           public string state_code { get; set; }
           public string country_code { get; set; }
           public object latitude { get; set; }
           public object longitude { get; set; }
       }

       public class VideoEmbed
       {
           public string embed_code { get; set; }
           public string description { get; set; }
       }

       public class Screenshot
       {
           public List<List<object>> available_sizes { get; set; }
           public object attribution { get; set; }
       }

       public class RootObject 
       {
           public string name { get; set; }
           public string permalink { get; set; }
           public string crunchbase_url { get; set; }
           public string homepage_url { get; set; }
           public string blog_url { get; set; }
           public string blog_feed_url { get; set; }
           public string twitter_username { get; set; }
           public string category_code { get; set; }
           public int number_of_employees { get; set; }
           public int founded_year { get; set; }
           public int founded_month { get; set; }
           public object founded_day { get; set; }
           public object deadpooled_year { get; set; }
           public object deadpooled_month { get; set; }
           public object deadpooled_day { get; set; }
           public object deadpooled_url { get; set; }
           public string tag_list { get; set; }
           public string alias_list { get; set; }
           public string email_address { get; set; }
           public string phone_number { get; set; }
           public string description { get; set; }
           public string created_at { get; set; }
           public string updated_at { get; set; }
           public string overview { get; set; }
           public Image image { get; set; }
           public List<object> products { get; set; }
           public List<Relationship> relationships { get; set; }
           public List<object> competitions { get; set; }
           public List<Providership> providerships { get; set; }
           public string total_money_raised { get; set; }
           public List<FundingRound> funding_rounds { get; set; }
           public List<object> investments { get; set; }
           public object acquisition { get; set; }
           public List<object> acquisitions { get; set; }
           public List<Office> offices { get; set; }
           public List<object> milestones { get; set; }
           public object ipo { get; set; }
           public List<VideoEmbed> video_embeds { get; set; }
           public List<Screenshot> screenshots { get; set; }
           public List<object> external_links { get; set; }
       }
    }
 }

1 Ответ

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

Полагаю, вы ищете что-то вроде этого, если нет, то вы должны указать свой вопрос или сказать, почему не работает приведенное ниже или какая ошибка возникает ...

foreach (var office in j.offices)
{
     Console.WriteLine("Description: {0}", office.description );
     //... 
}

Но одно точно: это можно сделать с помощью C #!

Для этих List<object> свойств вы должны либо добавить соответствующие классы в вашу модель (сгенерированные вами классы), либо попытаться привести эти объекты к JsonObject или sth. как это. (проверьте с помощью VS, чтобы увидеть фактический тип.)

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