Json用动态属性名反序列化对象数组



我想在c#中使用System.Text.Json的JsonSerializer.Deserialize来反序列化json对象。json看起来像这样:

{
"id":10,
"authorization_ids":[

],
"karma_user_ids":[
2
],
"group_ids":{
"2":[
"full"
],
"4":[
"read"
],
"5":[
"overview"
],
"7":[
"change",
"overview"
],
"10":[
"create"
]
}
}

但是属性group_ids包含具有动态属性名称的对象,这些对象实际上对应于组的ID。

{
2  : {full}
4  : {read}
5  : {overview}
7  : {change, overview}
10 : {create}
}

现在我想将group_ids反序列化为这样的对象:

public class GroupPermission
{
public int GroupID { get; set; }
public Permission Permission { get; set; }
public GroupPermission() { }
}
[Flags]
public enum Permission
{
full = 1,
read = 2,
overview = 4,
change = 8,
create = 16
}

这可能吗?有人能给我指个正确的方向吗?

应该像这样:

public class RootObject
{
[JsonPropertyName("id")]
public int Id {get;set;}
[JsonPropertyName("authorization_ids")]
public List<int> AuthorizationIds {get;set;}

[JsonPropertyName("karma_user_ids")]
public List<int> KarmaUserIds {get;set;}
[JsonPropertyName("group_ids")]
public Dictionary<int, List<string>> GroupIds {get;set;}
public RootObject()
{
AuthorizationIds = new List<int>();
KarmaUserIds = new List<int>();
GroupIds = new Dictionary<int, List<string>>();
}
}

测试:

public static void Main(string[] args)
{
var json = File.ReadAllText("./file.json");
var objs = JsonSerializer.Deserialize<RootObject>(json);
}

最新更新