简化JSON对象以反序列化

时间:2017-07-24 20:29:10

标签: c# json serialization json.net simplify

我正在使用加密货币进行一些应用程序,我遇到了我在某处找到的API问题。

我需要一些如何简化类序列化的提示。

public class Data
{
    public SUB SUB { get; set; }
    public USC USC { get; set; }
    public DUX DUX { get; set; }
    public XPS XPS { get; set; }
    public EQT EQT { get; set; }
    ... //and a lot more of same classes

}

Here is that REST page with JSON

我使用了http://json2csharp.com/类生成器 - 但之后我留下了数百个看起来相同的类 - 只有其他名称。我试过替换它但总是留下空值。

现在我知道了: -

    public class Data
    {
        public string Id { get; set; }
        public string Url { get; set; }
        public string ImageUrl { get; set; }
        public string Name { get; set; }
    ...
    }
    public class RootObject
    {
        public string BaseLinkUrl { get; set; }
        public List<List<Data>> Data { get; set; }
        public int Type { get; set; }
    }


    public static async Task<T> DeserializeStringToObject<T>(string url)
    {
        return JsonConvert
            .DeserializeObject<T>(await GetStreamFromUr(url));
    }

或者我应该使用不同的解串器?或者每次迭代循环时只检查一个对象?

3 个答案:

答案 0 :(得分:2)

我使用RestSharp进行了一些测试,效果很好

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = new RestClient("https://www.cryptocompare.com/api");

            var response = client.Execute<DataContainer>(new RestRequest("/data/coinlist"));

            var data = response.Data;        }
    }

    public class DataContainer
    {
        public string Message { get; set; }
        public Dictionary<string, DataItem> Data { get; set; }
    }

    public class DataItem
    {
        public string Id { get; set; }
        public string Url { get; set; }
        public string ImageUrl { get; set; }
        public string Name { get; set; }

    }
}

基本上我更改了Dictonary类型的Data属性。这样它将序列化字典中的所有数据,你可以像那样使用

data.Data["SUB"].Id

答案 1 :(得分:1)

你所拥有的是一本字典。请尝试这些课程。

public class RootObject
{
    public string Response { get; set; }
    public string Message { get; set; }
    public string BaseImageUrl { get; set; }
    public string BaseLinkUrl { get; set; }
    public Dictionary<string, CurrencyDefinition> Data { get; set; }
    public int Type { get; set; }
}

public class CurrencyDefinition
{
    public string Id { get; set; }
    public string Url { get; set; }
    public string ImageUrl { get; set; }
    public string Name { get; set; }
    public string CoinName { get; set; }
    public string FullName { get; set; }
    public string Algorithm { get; set; }
    public string ProofType { get; set; }
    public string FullyPremined { get; set; }
    public string TotalCoinSupply { get; set; }
    public string PreMinedValue { get; set; }
    public string TotalCoinsFreeFloat { get; set; }
    public string SortOrder { get; set; }
}

答案 2 :(得分:-1)

尝试使用newtonsoft

进行反序列化

enter link description here