JSON字符串[]到位掩码转换

时间:2019-05-06 21:37:55

标签: c# sqlite json.net .net-core-2.1

我有一个Web服务,该服务返回一个包含字符串数组的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并将结果的位掩码存储到sqlite数据库的BLOB列中。我将Enum构造如下:

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

将字符串数组解析为位掩码(int)以存储到数据库中的正确方法是什么?

我要做的是从数据库中获取位掩码,然后使用.HasFlag确定令牌中是否授予了正确的权限。

我也乐于寻求更好的方法来实现这一目标。

1 个答案:

答案 0 :(得分:0)

要将字符串值列表转换为单个标志值,可以将Enum.Parse(将字符串转换为枚举)和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并具有一些默认值。