我有一个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确定令牌中是否授予了正确的权限。
我也乐于寻求更好的方法来实现这一目标。
答案 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
并具有一些默认值。