Создание простого приложения, которое читает / отображает данные JSON из URL-адреса API - PullRequest
0 голосов
/ 21 февраля 2020

Всякий раз, когда я запускаю эту программу, визуализатор JSON показывает, что все JSON читается из URL, однако он продолжает говорить, что после десериализации объекта обнаруживается дополнительный текст.

Моя главная цель - просто прочитать JSON и добавить его в некоторый набор данных, чтобы я мог отобразить его

    public class Wrapper
    {
        [JsonProperty("results")]

        public DataSet DataSet { get; set; }
    }
    public class Rootobject
    {
        public int response_code { get; set; }
        public Result[] results { get; set; }
    }

    public class Result
    {
        public string category { get; set; }
        public string type { get; set; }
        public string difficulty { get; set; }
        public string question { get; set; }
        public string correct_answer { get; set; }
        public string[] incorrect_answers { get; set; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {



            string json = (new WebClient()).DownloadString("https://opentdb.com/api.php?amount=10&type=boolean");
            DataSet ds = JsonConvert.DeserializeObject<Wrapper>(json).DataSet;

        }
    }
}

}

1 Ответ

0 голосов
/ 21 февраля 2020

Попробуйте это (Все еще обновляет):

Я получил ToDataSet отсюда здесь

static class MyDSet
{
    public static DataSet ToMyDataSet<T>(this IList<T> list)
    {
        Type elementType = typeof(T);
        DataSet ds = new DataSet();
        DataTable t = new DataTable();
        ds.Tables.Add(t);

        //add a column to table for each public property on T
        foreach (var propInfo in elementType.GetProperties())
        {
            t.Columns.Add(propInfo.Name, propInfo.PropertyType);
        }

        //go through each property on T and add each value to the table
        foreach (T item in list)
        {
            DataRow row = t.NewRow();
            foreach (var propInfo in elementType.GetProperties())
            {
                row[propInfo.Name] = propInfo.GetValue(item, null);
            }
        }

        return ds;
    }
}

public class Wrapper
{
    [JsonProperty("results")]

    public DataSet DataSet { get; set; }
}

public class Result
{
    public string category { get; set; }
    public string type { get; set; }
    public string difficulty { get; set; }
    public string question { get; set; }
    public string correct_answer { get; set; }
    public List<string> incorrect_answers { get; set; }
}

public class RootObject
{
    public int response_code { get; set; }
    public List<Result> results { get; set; }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        string json = (new WebClient()).DownloadString("https://opentdb.com/api.php?amount=10&type=boolean");
        var ds = JsonConvert.DeserializeObject<RootObject>(json);
        Wrapper wrapper = new Wrapper();
        wrapper.DataSet = ds.results.ToMyDataSet();
        Console.WriteLine(ds.response_code);
        Console.WriteLine("Hello World!");
        Console.ReadKey();
    }
}

Наконец, я десериализовал Затем объект Root преобразовал список результатов объекта root в набор данных. Может быть упрощенный способ написания синтаксиса для десериализации объекта, преобразования и присвоения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...