JsonConvert.DeserializeObject有时不工作

时间:2017-05-16 15:58:17

标签: c# android json xamarin xamarin.android

我试图使用JsonConver.DeserializeObject反序列化一些json。但它并没有使用我所使用的api中的一些json。这是一个不起作用的链接:https://api.pokemontcg.io/v1/cards?setCode=smp

这是一个有用的链接。 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; }
    }
}

如果你能帮助我,我会觉得很棒。

1 个答案:

答案 0 :(得分:1)

我测试了你的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; }

    }
}

这就是我称之为Deserialize

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

(NB WRONG_JSON是你的json字符串...)

this is the result