2012-01-18 8 views
2

まず、この点を知りたいと思っている人に役立ててください: 私はさまざまなデータポイント(CrunchBase)をクエリする必要があります。このツールを使用してクラスを生成しましたhttp://json2csharp.com/#(JSON URLと対話するために必要なクラスを返します)次に、サービスを使用するためにScott Hanselmanを入力し、ブログ記事を使用してください。http://www.hanselman.com/blog/NuGetPackageOfTheWeek4DeserializingJSONWithJsonNET.aspx次は2つは一緒になって、必要な情報の一部分のためにCrunchBase APIに問い合わせることができるように微妙に調整しました。現在、MVCサイトに情報を提供するDataModelプロジェクトのDALレイヤーで使用するため、.dllでこれをラップするつもりで、コンソールアプリケーションでロジックを試しています。リストをループするJSON APIコール(CrunchBase)で<Objects>をループ

質問:これまでのところ、JSONエンドポイントから返されたsubObjectをループするために何をすべきか分かりません。私のコードは、実装を見たいと思う人のために投稿されています(C#でCrunchBase APIを呼び出すためのネット上の例は見つかりませんでした)。このコードは、ちょっとしたforeachループが必要な箇所でコメントされています私が見つけたすべての例は私にとってはうまくいきません。どのようにこれを行うにはどの方向にも感謝しています。例やコードの修正は自分自身を助ける方向に進み、他の人は自分自身で残りの部分を把握するようになります。追加の質問、これはC#ですべて行うことができますか?何か他のものを使用する必要がありますか?もしあれば、あなたは追加のフォローアップ研究のために推薦することができますか?

このコードで使用されるエンドポイントは、「http://api.crunchbase.com/v/1/company/」+ CompanyName +「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

ああ、読みにくいです。 「JSONエンドポイントから返されたサブオブジェクトをループするために何をすべきかわからない」という点に焦点を絞って質問をすることができますか?エンドポイントから返されるのは何ですか?これまでに何を試しましたか? –

答えて

0

は、私はあなたがあなたの質問をspecifiy、以下に動作しない、またはエラーが発生した理由を教えてくださいない場合は...、このような何かを探して

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

しかし、一つのためにしていると思います確か:それはC#で行うことができます!

これらのList<object>プロパティの場合、モデルに対応するクラス(生成したクラス)を追加するか、それらのオブジェクトをJsonObjectまたはsthにキャストしようとする必要があります。そうですね。 (実際のタイプを見るためにVSで調べてください)

+0

これはまさに私が伝えようとしていたものです!ありがとう、ありがとう、あなたの助けをありがとう、ちょうど今まであなたに戻ってコメントすることができませんでした(私は仕事中のインターン - 時にはPCから私を離れて保つ)非常にありがとう!追加のアドバイスを感謝します!あなたは私の一日を作った! –