Не удалось привести или преобразовать из {null} в system.Int32 в ответе JSON C # - PullRequest
1 голос
/ 21 января 2012

Я получаю следующее исключение при использовании этого кода для десериализации ответа JSON от CrunchBase. Странно то, что это происходит только с определенными страницами, которые десериализованы, несмотря на то, что и результаты, которые работают нормально, и те, у которых нет обоих, имеют пустые [], пустые "" и нулевые значения в парах ключ: значение. Как я могу разыграть или исправить свою ошибку?

Исключение выдается здесь:

   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/ после помещения в него URL-адреса конечной точки JSON.

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

1 Ответ

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

Json.NET поддерживает Схема JSON . Вы можете создать схему со всеми необходимыми свойствами, помеченными и проверить входящий JSON по ней перед десериализацией. В этом вы можете проверить, если значение null, вы можете изменить его на некоторое значение по умолчанию.

Надеюсь, это работает для вас.

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