using Newtonsoft.Json.Linq;
using System.Collections.Generic;
public static void Main()
var manager = new SessionManager();
manager.UserName = "stackoverflow";
manager.Password = "password";
manager.SetPermissions();
var settings = new JsonSerializerSettings();
settings.Converters.Add(new SessionPermissionConverter());
settings.Formatting = Newtonsoft.Json.Formatting.Indented;
string json = JsonConvert.SerializeObject(manager, settings);
SessionManager deserialized = JsonConvert.DeserializeObject<SessionManager>(json, settings);
public class SessionPermission
public string Permission { get; set; }
public bool IsAllowed { get; set; }
public class SessionPermissionConverter : JsonConverter
public override object ReadJson(
JsonSerializer serializer)
var obj = (JObject)JObject.ReadFrom(reader);
JProperty property = obj.Properties().FirstOrDefault();
return new SessionPermission
Permission = property.Name,
IsAllowed = property.Value.Value<bool>()
public override void WriteJson(
JsonSerializer serializer)
SessionPermission permission = (SessionPermission)value;
JObject obj = new JObject();
obj[permission.Permission] = permission.IsAllowed;
public override bool CanConvert(Type t)
return typeof(SessionPermission).IsAssignableFrom(t);
public override bool CanRead
public class SessionManager
public string UserName { get; set; }
public string Password { get; set; }
public List<SessionPermission> Permissions { get; set; }
public void SetPermissions()
Permissions = new List<SessionPermission>
new SessionPermission {Permission = "CreateUsers", IsAllowed = false},
new SessionPermission {Permission = "EditUsers", IsAllowed = false},
new SessionPermission {Permission = "EditBlog", IsAllowed = true}