JSON-строка [] в битовую маску - PullRequest
0 голосов
/ 07 мая 2019

У меня есть веб-сервис, который возвращает объект JSON, содержащий строковый массив. Я обработал объект через Json.NET:

    public partial class Token
    {
        [JsonProperty("id")]
        public string Id { get; set; }

        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("permissions")]
        public string[] Permissions { get; set; }
    }

Я хотел бы преобразовать строковый массив Permissions в Enum и сохранить полученную битовую маску в столбец BLOB в базе данных sqlite. У меня есть Enum, построенный так:

        [Flags]
        public enum Rights : uint
        {
            none= 0,
            read = 1,
            write = 2,
            modify = 4,
            [... etc ...]
        }

Как правильно разбить массив строк в битовую маску (int) для хранения в базе данных?

То, что я буду делать, - это извлечь битовую маску из базы данных, а затем использовать .HasFlag, чтобы определить, было ли предоставлено соответствующее разрешение в токене.

Я также открыт для лучших способов сделать это.

1 Ответ

0 голосов
/ 07 мая 2019

Чтобы преобразовать список строковых значений в одно значение флагов, вы можете объединить Enum.Parse (для преобразования строки в enum) и Aggregate в или все флаги вместе:

string[] permissions = new[]{"read", "write"};
Rights r = permissions
         .Select(x => (Rights)Enum.Parse(typeof(Rights), x)) // parse string to enum
         .Aggregate((cur,next) => cur | next); // merge all into single value

Примечание: если вы не можете гарантировать, что значения действительно всегда действительны, используйте Enum.TryParse вместо Parse и по умолчанию.

...