RoadRunner

CSharp · Console

/Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;

public class Application
{
	[JsonProperty("roles")]
	public IEnumerable<string> Roles { get; set; }
}

public class User
{
	[JsonProperty("user_info")]
	public IDictionary<string, Application> UserInfo { get; set; }
}
					
public class Program
{
	public static void Main()
	{
		var json = @"{
                ""user_info"": {
                    ""myapp1"": {
                      ""roles"": [
                      ""requestor""
                      ]
                    },
                    ""myapp2"": {
                      ""roles"": [
                        ""requests-edit"",
                        ""requests-view""
                      ]
                    },
                    ""account"": {
                      ""roles"": [
                        ""manage-account"",
                        ""manage-account-links"",
                        ""view-profile""
                      ]
                    }
                  }
                }";
		
		var deserializedJson = JsonConvert.DeserializeObject<User>(json);
		
		Console.WriteLine("[ " + string.Join(", ", GetUserApplicationRoles("myapp1", deserializedJson)) + " ]");
		Console.WriteLine("[ " + string.Join(", ", GetUserApplicationRoles("myapp2", deserializedJson)) + " ]");
		Console.WriteLine("[ " + string.Join(", ", GetUserApplicationRoles("account", deserializedJson)) + " ]");
	}
	
	private static IEnumerable<string> GetUserApplicationRoles(string applicationName, User data) => 
        data.UserInfo
            .TryGetValue(applicationName, out var value) ?
                value.Roles : 
                Enumerable.Empty<string>();
}
;