簡體   English   中英

如何將JSON結果放入列表

[英]How to get JSON result into List

我在這里有自己的代碼,已經獲取了JSON結果,然后我不知道將JSON結果移到下面的接口( IEntities函數)列表中。

class GetCategory : IEntities
{
    private JsonHandle _jsonhandle;
    private string _ocategory;

    public async void TaskCategory()
    {
        _jsonhandle = new JsonHandle();
        _jsonhandle.StrAPI = "http://api.nytimes.com/svc/books/v3/lists/names.json?api-key=7bb034b7693d6f9753b2f68e00b98c78%3A16%3A73599437";
        var client = new HttpClient();
        Task<string> datatask = client.GetStringAsync(_jsonhandle.StrAPI);
        try
        {
            var JsonRead = await datatask;
            JObject oCategory = JObject.Parse(JsonRead);
            List<JToken> results = oCategory["results"].Children().ToList();

            //serialize JSON results into .NET objects
            List<object> dtCategory = new List<object>();
            foreach (JToken result in results)
            {
                object _dtcategory = JsonConvert.DeserializeObject<object>(result.ToString());
                dtCategory.Add(_dtcategory);
                var listname = result["list_name"];
            }
        }
        catch (Exception error)
        {
            Console.WriteLine("AW!" + error.StackTrace);
        }

    public List<object> BookCategory()
    {

    }
}

IEntities接口的最后一個函數中,我需要將JSON結果放入List<object>接口中。

使用JSON時 ,首先要做的是創建模型對象 為此,您應該手動分析JSON輸出,或者可以通過以下鏈接並粘貼要使用的JSON或服務鏈接來自動生成模型。

json2csharp.com

我剛剛使用了您的API鏈接,生成的輸出是;

public class Result
{
    public string list_name { get; set; }
    public string display_name { get; set; }
    public string list_name_encoded { get; set; }
    public string oldest_published_date { get; set; }
    public string newest_published_date { get; set; }
    public string updated { get; set; }
}

public class RootObject
{
    public string status { get; set; }
    public string copyright { get; set; }
    public int num_results { get; set; }
    public List<Result> results { get; set; }
}

這將是我們的模型。

其次,據我所知,您要做的只是獲取結果列表,因此,在反序列化JSON輸出時,將使用Model.Result並將它們移到list中

然后,要獲取響應,可以使用私有方法,該方法返回async Task<string> ,在BookCategory()方法上,您可以獲取Results並反序列化JSON並根據JSON對象模型初始化列表;

public List<Model.Result> BookCategory()
{
    List<Model.Result> list = new List<Model.Result>();

    var model = JsonConvert.DeserializeObject<Model.RootObject>(TaskCategory().Result);

    list = model.results;

    return list;
}

反序列化JSON如下所示;

var model = JsonConvert.DeserializeObject<Model.RootObject>(TaskCategory().Result);

Model.cs

using System.Collections.Generic;

namespace SO1
{
    public class Model
    {
        public class Result
        {
            public string list_name { get; set; }
            public string display_name { get; set; }
            public string list_name_encoded { get; set; }
            public string oldest_published_date { get; set; }
            public string newest_published_date { get; set; }
            public string updated { get; set; }
        }

        public class RootObject
        {
            public string status { get; set; }
            public string copyright { get; set; }
            public int num_results { get; set; }
            public List<Result> results { get; set; }
        }
    }
}

GetCategory.cs

using Newtonsoft.Json;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Net.Http;
using System;

namespace SO1
{
    public class GetCategory : IEntities
    {
        private String BaseUri;

        public GetCategory(string BaseUri)
        {
            this.BaseUri = BaseUri;
        }

        private async Task<string> TaskCategory()
        {
            var httpClient = new HttpClient();

            var parameters = new Dictionary<string, string>();
            parameters["text"] = "text";

            var response = await httpClient.GetStringAsync(BaseUri);

            return response;        
        }

        public List<Model.Result> BookCategory()
        {
            List<Model.Result> list = new List<Model.Result>();

            var model = JsonConvert.DeserializeObject<Model.RootObject>(TaskCategory().Result);

            list = model.results;

            return list;
        }

    }
}

IEntities

using System.Collections.Generic;

namespace SO1
{
    public interface IEntities
    {
        List<Model.Result> BookCategory();
    }
}

Program.cs中

using System;
using System.Collections.Generic;

namespace SO1
{
    class Program
    {
        static void Main(string[] args)
        {
            string BaseUri = "http://api.nytimes.com/svc/books/v3/lists/names.json?api-key=7bb034b7693d6f9753b2f68e00b98c78%3A16%3A73599437";

            IEntities entity = new GetCategory(BaseUri);

            List<Model.Result> listBookCategory = new List<Model.Result>();

            listBookCategory = entity.BookCategory();

            foreach (Model.Result r in listBookCategory)
            {
                Console.WriteLine();
                Console.WriteLine("...List Name             : " + r.list_name);
                Console.WriteLine("...Display Name          : " + r.display_name);
                Console.WriteLine("...List Name Encoded     : " + r.list_name_encoded);
                Console.WriteLine("...Oldest Published Date : " + r.oldest_published_date);
                Console.WriteLine("...Oldest Published Date : " + r.newest_published_date);
                Console.WriteLine("...Updated               : " + r.updated);
                Console.WriteLine();
            }
        }
    }
}

輸出(僅打印前三個結果)

...List Name             : Combined Print and E-Book Fiction
...Display Name          : Combined Print & E-Book Fiction
...List Name Encoded     : combined-print-and-e-book-fiction
...Oldest Published Date : 2011-02-13
...Oldest Published Date : 2015-12-27
...Updated               : WEEKLY


...List Name             : Combined Print and E-Book Nonfiction
...Display Name          : Combined Print & E-Book Nonfiction
...List Name Encoded     : combined-print-and-e-book-nonfiction
...Oldest Published Date : 2011-02-13
...Oldest Published Date : 2015-12-27
...Updated               : WEEKLY


...List Name             : Hardcover Fiction
...Display Name          : Hardcover Fiction
...List Name Encoded     : hardcover-fiction
...Oldest Published Date : 2008-06-08
...Oldest Published Date : 2015-12-27
...Updated               : WEEKLY

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM