JSON.net фильтр репозиториев, полученных с сайта - PullRequest
0 голосов
/ 04 октября 2018

Здравствуйте, сообщество Stackoverflow, я недавно вошел в C # и JSON.net, и моя задача - фильтровать репозитории, которые я получаю с веб-сайта.Я работаю с Crucible API.

client.Authenticator = new HttpBasicAuthenticator(User, Password);
var request = new RestRequest("", Method.GET);
Console.Clear();

client.ExecuteAsync(request, response => {
    Console.WriteLine(response.Content);
});

Console.Read();

Как мне отфильтровать все, кроме displayNames репозиториев, которые я получаю в своем консольном приложении?Токовый выход выглядит так:

{
    "repoData": [{
            "name": "Example",
            "displayName": "Example",
            "type": "git",
            "enabled": true,
            "available": true,
            "location": "Example.com",
            "path": ""
        }
    ]
}

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Создание быстрого типа для вашего json

public class RepoData
{
    public string name { get; set; }
    public string displayName { get; set; }
    public string type { get; set; }
    public bool enabled { get; set; }
    public bool available { get; set; }
    public string location { get; set; }
    public string path { get; set; }
}

public class RootObject4
{
    public List<RepoData> repoData { get; set; }
}

Здесь я создаю консольное приложение для демонстрационных целей

class Program
{
    static void Main(string[] args)
    {
        var json = @"{'repoData':[{'name':'Example','displayName':'Example1','type':'git','enabled':true,'available':true,'location':'Example.com','path':''}, {'name':'Example','displayName':'Example2','type':'git','enabled':true,'available':true,'location':'Example.com','path':''}]}";

        RootObject4 rootObject4 = JsonConvert.DeserializeObject<RootObject4>(json);

        List<string> displayNames = new List<string>();

        foreach (var item in rootObject4.repoData)
        {
            displayNames.Add(item.displayName);
        }

        displayNames.ForEach(x => Console.WriteLine(x));

        Console.ReadLine();
    }
}

Альтернатива: Есливы не хотите создавать какие-либо классы, тогда JObject будет лучше обрабатывать ваш json, и вы извлечете значения displayName из приведенного ниже примера приложения консоли.

class Program
{
    static void Main(string[] args)
    {
        var json = @"{'repoData':[{'name':'Example','displayName':'Example1','type':'git','enabled':true,'available':true,'location':'Example.com','path':''}, {'name':'Example','displayName':'Example2','type':'git','enabled':true,'available':true,'location':'Example.com','path':''}]}";

        JObject jObject = JObject.Parse(json);

        var repoData = jObject["repoData"];

        var displayNames = repoData.Select(x => x["displayName"]).Values().ToList();

        displayNames.ForEach(x => Console.WriteLine(x));

        Console.ReadLine();
    }
}

Вывод:

enter image description here

0 голосов
/ 04 октября 2018

Вы можете использовать JsonConvert.DeserializeObject.Пример приведен ниже

https://www.newtonsoft.com/json/help/html/DeserializeObject.htm

Использование JsonConvert.DeserializeObject для десериализации Json в класс POCO C #

Кстати, ваш JSONнеполный.Пожалуйста, добавьте полный вывод, чтобы другие могли помочь лучше.

...