public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            Microsoft.SharePoint.Client.BasePermissions result =
                new Microsoft.SharePoint.Client.BasePermissions();

            JToken token = JToken.Load(reader);
            String basePermissionString = token.ToString();

            if (!String.IsNullOrEmpty(basePermissionString))
            {
                // Is it an int value (for backwards compability)?
                Int32 permissionInt = 0;
                if (int.TryParse(basePermissionString, out permissionInt))
                {
                    result.Set((Microsoft.SharePoint.Client.PermissionKind)permissionInt);
                }
                else
                {
                    foreach (var pk in basePermissionString.Split(new char[] { ',' }))
                    {
                        Microsoft.SharePoint.Client.PermissionKind permissionKind =
                            Microsoft.SharePoint.Client.PermissionKind.AddAndCustomizePages;
                        if (Enum.TryParse(basePermissionString, out permissionKind))
                        {
                            result.Set(permissionKind);
                        }
                    }
                }
            }

            return(result);
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            Microsoft.SharePoint.Client.BasePermissions result =
                new Microsoft.SharePoint.Client.BasePermissions();

            JToken token = JToken.Load(reader);
            String basePermissionString = token.ToString();

            if (!String.IsNullOrEmpty(basePermissionString))
            {
                // Is it an int value (for backwards compability)?
                Int32 permissionInt = 0;
                if (int.TryParse(basePermissionString, out permissionInt))
                {
                    result.Set((Microsoft.SharePoint.Client.PermissionKind)permissionInt);
                }
                else
                {
                    foreach (var pk in basePermissionString.Split(new char[] { ',' }))
                    {
                        Microsoft.SharePoint.Client.PermissionKind permissionKind =
                            Microsoft.SharePoint.Client.PermissionKind.AddAndCustomizePages;
                        if (Enum.TryParse(basePermissionString, out permissionKind))
                        {
                            result.Set(permissionKind);
                        }
                    }
                }
            }

            return (result);
        }
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            String jsonValue = null;

            Microsoft.SharePoint.Client.BasePermissions basePermissions =
                value as Microsoft.SharePoint.Client.BasePermissions;
            if (basePermissions != null)
            {
                List <String> permissions = new List <String>();
                foreach (var pk in (Microsoft.SharePoint.Client.PermissionKind[])Enum.GetValues(typeof(Microsoft.SharePoint.Client.PermissionKind)))
                {
                    if (basePermissions.Has(pk) && pk !=
                        Microsoft.SharePoint.Client.PermissionKind.EmptyMask)
                    {
                        permissions.Add(pk.ToString());
                    }
                }
                jsonValue = string.Join(",", permissions.ToArray());
            }

            writer.WriteValue(jsonValue);
        }