2017-05-16 105 views
0

我試圖反序列化一些使用JsonConver.DeserializeObject的json。然而它不適用於我使用的api中的某些json。這裏是一個不起作用的鏈接:https://api.pokemontcg.io/v1/cards?setCode=smpJsonConvert.DeserializeObject有時不工作

這裏是一個可以工作的鏈接。 https://api.pokemontcg.io/v1/cards?setCode=sm2

我不確定它爲什麼有時有效,有時不是。來自它的數據非常相似,只是不同的卡片。 下面是代碼:

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。

這是Model

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數字。雖然它應該是一個字符串。這個名字使我失望了。 –