2012-01-21 5 views
1

このコードを使用してCrunchBaseからJSONレスポンスを逆シリアル化する場合、次の例外が発生します。変わったことは、うまく動作する結果と、両方とも空の[]、空の ""、およびキー:値のペアのヌル値を持たないものの両方でも、逆シリアル化されている特定のページでのみ発生します。自分のミスをキャストまたは修正するにはどうすればよいですか?JSONレスポンスで{null}からsystem.Int32にキャストまたは変換できませんでした。C#

例外がスローされ、ここで取得します:

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エンドポイント上の追加オブジェクトについて尋ねられます。これらはJSONエンドポイントのURLを入れた後にhttp://json2csharp.com/によって生成されました。

JSONはので、ここでの長さで2例のリンクは次のとおりです。この他(ほか)は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; } 
    } 
+0

'System.Int32'を' Nullable 'に変更して試すことはできますか? –

+0

もっと詳しい情報を教えていただけますか? RootObjectの構造またはJSONのサンプル? – JaredPar

答えて

0

例外をスローしながら、この1はエラーhttp://api.crunchbase.com/v/1/company/kiip.jsなく動作、Json.NETはJSON Schemaをサポートしています。デシリアライズする前に、必要なすべてのプロパティーがマークされたスキーマを作成し、受信したJSONを検証することができます。この場合、値がnullかどうかを確認することができます。デフォルト値に変更することができます。

これはうまくいきます。

+0

ありがとう、私はそれを試してみるつもりだとあなたはそれが行った方法をお知らせください。あなたの迅速な助けをありがとう!とても有難い! –

+0

申し訳ありませんが、あなたの提案した情報を調べましたが、残念ながら自分のアプリケーションでこれを実際にどのように活用するのか理解できていません。私は個人的な助けがほんの少しだけ必要だと思います。あなたのプロフィールを読んで、あなたやあなたが知っている人が興味を持っているかもしれません... http://bangalore.craigslist.co.in/cpg/ここを見てください。 2812084605.html私の知識がない場合 –

+0

@Amar Palsapure:使用する必要があるキーがある場合、null値の適切な値は何ですか? – Phil

関連する問題