无法从{null}强制转换或转换为系统.JSON响应C#中的Int32

本文关键字:转换 JSON 系统 响应 Int32 中的 null | 更新日期: 2023-09-27 18:21:11

当使用这段代码对CrunchBase的JSON响应进行反序列化时,我得到了以下异常。奇怪的是,这种情况只发生在正在反序列化的某些页面上,即使工作正常的结果和键:值对中不同时具有空[]、空"和null值的结果。我该如何判断或纠正我的错误?

此处抛出异常:

   JsonSerializer serializer = new JsonSerializer();
   RootObject ro = JsonConvert.DeserializeObject<RootObject>(response);

内部异常是:

   InnerException: 
   Message=Could not cast or convert from {null} to System.Int32.
   Source=Newtonsoft.Json

提前谢谢你的眼睛!

更新:如请求根对象的结构和该JSON端点上的附加对象。这些是由http://json2csharp.com/在将JSON端点的URL放入其中之后。

JSON很长,所以这里有两个示例链接:这一个可以正常工作http://api.crunchbase.com/v/1/company/kiip.js,而另一个(和其他)抛出异常http://api.crunchbase.com/v/1/company/tata-communications.js

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

无法从{null}强制转换或转换为系统.JSON响应C#中的Int32

Json.NET支持Json架构。您可以创建一个标记了所有必需属性的模式,并在反序列化之前验证传入的JSON。在这里,您可以检查值是否为null,您可以将其更改为某个默认值。

希望这对你有用。