问题在于,获取所有组的gerrit响应看起来像这样,我发现在{}之外拥有该组的名称会给我带来问题,因为当我创建一个类来保存组时,我是被迫拥有像组一样命名的类,以便能够反序列化响应。
但是每当创建一个新的gerrit组时,我都不想创建一个具有该名称的新类。
[{
"Administrators": {
"id": "6a1e70e1a88782771a91808c8af9bbb7a9871389",
"url": "#/admin/groups/uuid-6a1e70e1a88782771a91808c8af9bbb7a9871389",
"options": {
},
"description": "Gerrit Site Administrators",
"group_id": 1,
"owner": "Administrators",
"owner_id": "6a1e70e1a88782771a91808c8af9bbb7a9871389"
},
"Anonymous Users": {
"id": "global%3AAnonymous-Users",
"url": "#/admin/groups/uuid-global%3AAnonymous-Users",
"options": {
},
"description": "Any user, signed-in or not",
"group_id": 2,
"owner": "Administrators",
"owner_id": "6a1e70e1a88782771a91808c8af9bbb7a9871389"
},
"MyProject_Committers": {
"id": "834ec36dd5e0ed21a2ff5d7e2255da082d63bbd7",
"url": "#/admin/groups/uuid-834ec36dd5e0ed21a2ff5d7e2255da082d63bbd7",
"options": {
"visible_to_all": true,
},
"group_id": 6,
"owner": "MyProject_Committers",
"owner_id": "834ec36dd5e0ed21a2ff5d7e2255da082d63bbd7"
}]
以下是课程:
public class Administrators
{
public string id { get; set; }
public string url { get; set; }
public Options options { get; set; }
public string description { get; set; }
public int group_id { get; set; }
public string owner { get; set; }
public string owner_id { get; set; }
}
public class AnonymousUsers
{
public string id { get; set; }
public string url { get; set; }
public options { get; set; }
public string description { get; set; }
public int group_id { get; set; }
public string owner { get; set; }
public string owner_id { get; set; }
}
public class MyProjectCommitters
{
public string id { get; set; }
public string url { get; set; }
public options { get; set; }
public int group_id { get; set; }
public string owner { get; set; }
public string owner_id { get; set; }
}
我想要做的是有一个名为GerritGroup的类来保存所有这些并且能够反序列化对象中的任何这样的组。
我现在这样做的方式是这样的:
IList<GerritGroup> grps = JsonConvert.DeserializeObject<IList<GerritGroup>>(cleanedResponse);
我得到一个列表,其中包含一个所有属性为null的对象。
你能就这个JSON响应给我一些建议吗?
答案 0 :(得分:1)
你有一个集合,它持有一个带有键值对的对象,其中键是可变的,值是组。
换句话说,您只需要一个Group
类:
public class Group
{
public string id { get; set; }
public string url { get; set; }
public Dictionary<string, string> options { get; set; }
public string description { get; set; }
public int group_id { get; set; }
public string owner { get; set; }
public string owner_id { get; set; }
}
您需要将JSON反序列化为List<Dictionary<string, Group>>
:
var groups = JsonConvert.DeserializeObject<List<Dictionary<string, Group>>>(json);
foreach (var g in groups)
{
foreach (var e in g)
{
Console.WriteLine(e.Key + " " + e.Value.description);
}
}