繁体   English   中英

为什么我的反序列化给我Newtonsoft.Json.JsonConvert一个错误?

[英]Why my deserialization is giving me an error Newtonsoft.Json.JsonConvert?

public List<CoinMarket> GetCoinMarket()
{
    List<CoinMarket> coinMarket = new List<CoinMarket>();
    var URLWebAPI = "http://190.202.54.19/wsZeus/api/Account/Markets/Get";
    try
    {
        using (var Client = new System.Net.Http.HttpClient())
        {
            var JSON =  Client.GetStringAsync(URLWebAPI);
            coinMarket = (List<CoinMarket>)Newtonsoft.Json.JsonConvert.DeserializeObject(JSON.Result);
        }
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine(@"    ERROR {0}", ex.Message);
    }
    return coinMarket;
}

它在扔,我不知道为什么。 序列化部分似乎出了点问题。 但是我证实了。

您使用的json解串器不正确。 DeserializeObject返回无法投射到List<T>自定义对象。 此输出:

Newtonsoft.Json.Linq.JArray
SO20171129.CoinData[]
System.Collections.Generic.List`1[SO20171129.CoinData]

是此代码的结果。

class Program
{
    static void Main(string[] args)
    {
        // returns Newtonsoft.Json.Linq.JArray
        var coinMarket = Newtonsoft.Json.JsonConvert.DeserializeObject(File.ReadAllText("get.json"));
        Console.WriteLine(coinMarket.GetType());
        // returns array of CoinData
        var coinMarketTyped = Newtonsoft.Json.JsonConvert.DeserializeObject<CoinData[]>(File.ReadAllText("get.json"));
        Console.WriteLine(coinMarketTyped.GetType());
        // returns List of CoinData
        var coinMarketTyped2 = Newtonsoft.Json.JsonConvert.DeserializeObject<List<CoinData>>(File.ReadAllText("get.json"));
        Console.WriteLine(coinMarketTyped2.GetType());
    }
}

public class CoinData
{
    public string id { get; set; }
    public string name { get; set; }
    public string symbol { get; set; }
    public string rank { get; set; }
    public string price_usd { get; set; }
    public string price_btc { get; set; }
    public string __invalid_name__24h_volume_usd { get; set; }
    public string market_cap_usd { get; set; }
    public string available_supply { get; set; }
    public string total_supply { get; set; }
    public string percent_change_1h { get; set; }
    public string percent_change_24h { get; set; }
    public string percent_change_7d { get; set; }
    public string last_updated { get; set; }
}

我的猜测是您的json结构成员与CoinMarket类成员不匹配。

我要做的是在以下网站上复制json结果并生成相应的CoinMarket类: http ://json2csharp.com/

它将为您输出正确的CoinMarket类。

 public class CoinMarket
{
    public string id { get; set; }
    public string name { get; set; }
    public string symbol { get; set; }
    public string rank { get; set; }
    public string price_usd { get; set; }
    public string price_btc { get; set; }
    [JsonProperty("24h_volume_usd")]
    public string h_volume_usd { get; set; }
    public string market_cap_usd { get; set; }
    public string available_supply { get; set; }
    public string total_supply { get; set; }
    public string percent_change_1h { get; set; }
    public string percent_change_24h { get; set; }
    public string percent_change_7d { get; set; }
    public string last_updated { get; set; }

}

}

这是我的CoinMarket课程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM