2016-11-01 19 views
0

私はAsp.Net mvcアプリケーションを開発しています。私のアプリケーションでは、リモートサーバーからjsonオブジェクトを取得する必要があります。私はそれのためのWebクライアントを使用しています。しかし、それは私にエラーを与えている。私のシナリオは以下の通りです。私は、ブラウザからアクセスすると、それはだから私はJSONとしてそのデータを取得し、戻ってそれらをシリアライズしようとしています。このasp.net mvcのオブジェクトへのリモートサーバーバインディングからJsonデータを取得できません

enter image description here

のようなものを返す

http://graph.facebook.com/{fb_id}/picture?width=200&height=200&redirect=false 

私はこのURLを持っています。だから私はそのデータをバインドするために、以下のような2つのクラスを構築します。 controllで

public class FacebookAvatarResponse 
    { 
     [JsonProperty("data")] 
     public FacebookAvatarData Data { get; set; } 
    } 

    public class FacebookAvatarData 
    { 
     [JsonProperty("height")] 
     public int Height { get; set; } 
     [JsonProperty("width")] 
     public int Width { get; set; } 
     [JsonProperty("is_silhouette")] 
     public bool IsSilhouette { get; set; } 
     [JsonProperty("url")] 
     public string Url { get; set; } 
    } 

あなたはJSONとして、私はそのデータを取得しています参照し、操作結果として返すことができるように、私はアクションメソッド

[AllowAnonymous] 
     public JsonResult Test(string avatarDataUrl) 
     { 
      using (WebClient webClient = new WebClient()) 
      { 
       string data = webClient.DownloadString(avatarDataUrl); 
       return Json(JsonConvert.DeserializeObject<FacebookAvatarResponse>(data),JsonRequestBehavior.AllowGet); 
      } 
     } 

を構築しました。しかし、正しいURLをパラメータとして渡すアクションメソッドを要求すると、このエラーが表示されます。

enter image description here

どのように私は、特定のクラスに結合するリモートサーバからJSONデータを取得することができますか?

+0

あなたは 'avatarDataUrl'を削除し、' webClient.DownloadString( "http://graph.facebook.com/{fb_id}/picture?width=200&height=200&redirect=false")に置き換えた場合、 'それをしません作業? –

+0

それは働いている。イメージを直接ダウンロードしています。私はブラウザでアクセスするのではなく、Jsonを返すわけではありません。どうして? –

+0

これは期待どおりの仕事か、JSONを返そうとしていますか? –

答えて

0

JSonをDeserializeObjectに渡していない可能性があります。

JsonConvert.DeserializeObjectはJSON値をとります。

デシリアライズするには、データがjson形式であることを確認してください。

Json(JsonConvert.DeserializeObject<FacebookAvatarResponse>(data), 
    JsonRequestBehavior.AllowGet); 
関連する問題