循环列表<;对象>;在JSON API调用(CrunchBase)中
本文关键字:调用 CrunchBase API lt 列表 对象 gt 循环 JSON | 更新日期: 2023-09-27 18:20:37
首先,让这对任何想要达到这一点的人都有帮助:我有一个API,我需要查询各种数据点(CrunchBase),我使用这个工具获取URL并为其生成类http://json2csharp.com/#(返回与该JSON URL交互所需的类)接下来,我需要使用该服务,输入Scott Hanselman来拯救它,并使用了他的博客文章来介绍如何做到这一点http://www.hanselman.com/blog/NuGetPackageOfTheWeek4DeserializingJSONWithJsonNET.aspx接下来,我将两者放在一起,并进行了一些修改,以便查询CrunchBaseneneneba API以获得所需的部分信息。目前,我只是用控制台应用程序来计算逻辑,因为我打算稍后将其封装在.dll中,以便在为MVC站点提供信息的DataModel项目的DAL层中使用。
问题是:到目前为止,这是有效的,只是我不知道应该怎么做才能循环通过JSON端点返回的子对象。我的代码是为任何想看到实现的人按原样发布的(我在网上找不到一个在C#中调用CrunchBaseneneneba API的示例ANYWHERE)。我知道需要有一些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; }
}
}
}
我想你正在寻找这样的东西,如果没有,你应该指定你的问题,或者告诉为什么下面的不起作用,或者发生了哪个错误。。。
foreach (var office in j.offices)
{
Console.WriteLine("Description: {0}", office.description );
//...
}
但有一点是肯定的:这可以用C#完成!
对于那些List<object>
属性,您应该将相应的类添加到模型中(您生成的类),或者尝试将这些对象强制转换为JsonObject
或类似的对象。(用VS检查以查看实际类型。)