c#json读取树结构

时间:2015-09-30 13:19:28

标签: c# json

我目前陷入了一个需要为学校项目构建的应用程序。我们需要从api链接读取数据并将其显示在列表中,但我不能设置类的变量,因为它在树结构中,我不知道如何在响应中导航。回复如下。如何获得类中的字符串标题与此响应中的标题相同?

    {
        Results: [
        {
            Id: 6413,
            Feed: 1,
            Title: "'Politieteam chemicaliën werkt onder te grote druk'",
            Summary: "Het team van de politie dat dagelijks met levensgevaarlijke chemicaliën te maken krijgt bij het ontmantelen van illegale drugslabs staat onder enorme druk. Sommige werkdagen duren 24 uur.<br /> ",
            PublishDate: "2015-09-30T14:32:28",
            Image: "http://media.nu.nl/m/m1oxo80axqo8_sqr256.jpg/politieteam-chemicalien-werkt-grote-druk.jpg",
            Url: "http://www.nu.nl/binnenland/4136038/politieteam-chemicalien-werkt-grote-druk.html",
            Related: [
                "http://nu.nl/binnenland/3932577/vaten-met-chemische-xtc-stoffen-gevonden-in-garage-breugel.html",
                "http://nu.nl/binnenland/3486693/drugslaboratorium-in-huis-heerlen.html",
                "http://nu.nl/buitenland/2614100/synthetische-drugs-verdringen-cocaine.html"
            ],
            Categories: [
                    {
                        Id: 50,
                        Name: "Algemeen"
                    },
                    {
                        Id: 53,
                        Name: "Binnenland"
                    }
                    ],
            IsLiked: false
        },
        {
            Id: 6414,
            Feed: 2,
            Title: "'Nederlandse betalingsdient Adyen gewaardeerd op 2 miljard'",
            Summary: "Een Amerikaans investeringsfonds, waar onder anderen Mark Zuckerberg van Facebook en Jack Dorsey van Twitter in participeren, heeft een investering gedaan in de Nederlandse betalingsverkeerdienst Adyen. &nbsp;",
            PublishDate: "2015-09-30T14:30:29",
            Image: "http://media.nu.nl/m/m1nxkfwa72hm_sqr256.jpg/nederlandse-betalingsdient-adyen-gewaardeerd-2-miljard.jpg",
            Url: "http://www.nu.nl/internet/4136034/nederlandse-betalingsdient-adyen-gewaardeerd-2-miljard.html",
            Related: [ ],
            Categories: [
                    {
                        Id: 57,
                        Name: "Internet"
                    },
                    {
                        Id: 91,
                        Name: "Economie"
                    },
                    {
                        Id: 94,
                        Name: "Ondernemen"
                    }
                ],
            IsLiked: false
        },
    }

我失败的代码:

    public async Task LoadData()
    {
        try
        {
            using (var client = new HttpClient())
            {
                var json = await client.GetStringAsync("HTTPLINKTOAPI");
                Data = JsonConvert.DeserializeObject<ObservableCollection<TestModel>>(json);
            }
        }
        catch { }
    }

TestModel类:

    public sealed class TestModel
    {
        public string Id { get; set; }
        public string Title { get; set; }
    }

1 个答案:

答案 0 :(得分:0)

首先,为所有结果创建容器(Results类) - JSON中的结果对象。它是对象(Result类)的集合(数组),具有IdTitle和其他集合等属性等等。

public class ResultContent
{
    public IList<Result> Results { get; set; }
}

public class Result
{
    public int Id { get; set; }

    public string Title { get; set; }
}

var r = JsonConvert.DeserializeObject<ResultContent>(json);

另外,摆脱这个空的catch,否则你不会知道从API获取数据时出了什么问题。空catch总是非常糟糕的做法。