StackOverflow Q32184375

CSharp · Console

/Program.cs

using System;
using System.Linq;
using System.Collections.Generic;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
					
public class Program
{
	public static void Main()
	{
		string json = @"
            {
                ""accessType"":""Grant"",
                ""spaces"":[
                    {""spaceId"":""5c209ba0-e24d-450d-8f23-44a99e6ae415""},
                    {""spaceId"":""e24d5ce1-209b-462c-8566-6ae41544a99e""}
                ],
                ""privilegeId"":""db7cd037-6503-4dbf-8566-2cca4787119d"",
                ""privilegeName"":""PERM_RVMC_DEV"",
                ""privilegeDescription"":""RVMC Dev"",
                ""privilegeType"":""Permission""
            }";
		
		ProfilePrivilege pp = JsonConvert.DeserializeObject<ProfilePrivilege>(json);
		
		Console.WriteLine("AccessType: " + pp.AccessType);
		Console.WriteLine("PrivilegeId: " + pp.PrivilegeId);
		Console.WriteLine("PrivilegeName: " + pp.PrivilegeName);
		Console.WriteLine("PrivilegeDescription: " + pp.PrivilegeDescription);
		Console.WriteLine("PrivilegeType: " + pp.PrivilegeType);
		Console.WriteLine("Spaces: " + string.Join(", ", pp.Spaces.Select(g => g.ToString())));
	}
}

class SpaceListConverter  : JsonConverter
{
	public override bool CanConvert(Type objectType)
	{
		return (objectType == typeof(List<Guid>));
	}
	
	public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
	{
		return JArray.Load(reader)
			.Children<JObject>()
			.Select(jo => Guid.Parse((string)jo["spaceId"]))
			.ToList();
	}
	
	public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
	{
		throw new NotImplementedException();
	}
}

public class ProfilePrivilege
{
	public AccessType AccessType { get; set; }
	public Guid PrivilegeId { get; set; }
	public string PrivilegeName { get; set; }
	public string PrivilegeDescription { get; set; }
	public PrivilegeType PrivilegeType { get; set; }
	[JsonConverter(typeof(SpaceListConverter))]
	public List<Guid> Spaces;
}

public enum AccessType { Grant, Deny }
public enum PrivilegeType { Permission, Other }
;