2017-05-16 17 views
0

JsonConver.DeserializeObjectを使用してjsonをデシリアライズしようとしています。しかし、それは私が使用しているAPIからいくつかのJSONで動作していない。ここにはうまくいかないリンクがあります:https://api.pokemontcg.io/v1/cards?setCode=smpJsonConvert.DeserializeObjectが動作しない場合があります

ここには動作するリンクがあります。 https://api.pokemontcg.io/v1/cards?setCode=sm2

なぜ時にはうまくいかず、時にはうまくいかないと思います。そこから出てくるデータはお互いに非常によく似ていますが、異なるカードだけです。 uは私を助けることができる私はそれは素晴らしい見つけるだろう場合

public static async Task<T> GetDataAsync<T>(this HttpClient client, string address, string querystring) 
      where T : class 
     { 
      var uri = address; 

      if (!string.IsNullOrEmpty(querystring)) 
      { 
       uri += querystring; 
      } 

      var httpMessage = await client.GetStringAsync(uri); 
      var jsonObject = JsonConvert.DeserializeObject<T>(httpMessage); 

      return jsonObject; 
     } 

今私のカードクラス

namespace CardAppReal.Lib.Models 
{ 
    public class Card 
    { 
     public string id { get; set; } 
     public string name { get; set; } 
     public string imageUrl { get; set; } 
     public string imageUrlHiRes { get; set; } 
     public string supertype { get; set; } // if pokemon, trainer or energy 
     public string setcode { get; set; } 
     public int number { get; set; } 
     public string set { get; set; } 

    } 
} 

ルート

using System.Collections.Generic; 
using CardAppReal.Lib.Models; 

namespace CardAppReal.Lib.Entities 
{ 
    public class RootCard 
    { 
     public List<Card> cards { get; set; } 
    } 
} 

付: は、ここでは、コードです。

+0

デシリアライズを呼び出す方法ですそれは失敗する、それはあなたに例外またはエラーメッセージを与えるか? – Jason

+0

@ Jasonいいえ、jsonObjectを空にしておくだけです。 –

+0

私はあなたが慎重に作業結果を非正常なものと比較し、その違いを特定することをお勧めします。 – Jason

答えて

0

私はあなたのjsonをテストしました。

これはモデル

namespace Test 
{ 
public class Attack 
    { 
     public List<string> cost { get; set; } 
     public string name { get; set; } 
     public string text { get; set; } 
     public string damage { get; set; } 
     public int convertedEnergyCost { get; set; } 
    } 

    public class Weakness 
    { 
     public string type { get; set; } 
     public string value { get; set; } 
    } 

    public class Resistance 
    { 
     public string type { get; set; } 
     public string value { get; set; } 
    } 

    public class Ability 
    { 
     public string name { get; set; } 
     public string text { get; set; } 
     public string type { get; set; } 
    } 

    public class Card 
    { 
     public string id { get; set; } 
     public string name { get; set; } 
     public int nationalPokedexNumber { get; set; } 
     public string imageUrl { get; set; } 
     public string imageUrlHiRes { get; set; } 
     public string subtype { get; set; } 
     public string supertype { get; set; } 
     public string hp { get; set; } 
     public List<string> retreatCost { get; set; } 
     public string number { get; set; } 
     public string artist { get; set; } 
     public string rarity { get; set; } 
     public string series { get; set; } 
     public string set { get; set; } 
     public string setCode { get; set; } 
     public List<string> types { get; set; } 
     public List<Attack> attacks { get; set; } 
     public List<Weakness> weaknesses { get; set; } 
     public List<Resistance> resistances { get; set; } 
     public string evolvesFrom { get; set; } 
     public Ability ability { get; set; } 
     public List<string> text { get; set; } 
    } 

    public class RootObject 
    { 
     public List<Card> cards { get; set; } 

    } 
} 

であり、これは私がすると

RootObject root = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(RootObject.WRONG_JSON); 

(NBのWRONG_JSONがあなたのJSON文字列である...)

this is the result

+0

私の問題が表示されます。私は数字のためにintを使いました。それは文字列でなければなりません。その名前は私を分かりませんでした。 –

関連する問題