通用类保存gerrit的JSON数据
问题描述:
问题是,获取所有组的Gerrit响应看起来像这样,我发现拥有{}之外的组名称会给我造成问题,因为当我创建类来保存该组,我不得不让组中的类能够反序列化响应。通用类保存gerrit的JSON数据
但是,无论何时创建一个新的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);
,我也得到一个列表与空的所有属性一个对象。
你能给我一些关于这个JSON响应的建议吗?
答
你已经有了一个集合,它拥有一个带有键值对的对象,其中键是可变的,值是组。
换句话说,你只需要一个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);
}
}
+0
事实上,这是我不明白的。非常感谢你!它像一个魅力! – UrsulRosu
可能使用http://jsonlint.com/来验证json,例如“visible_to_all”:true *,* - 逗号可能是解析错误的原因。 – Vladimir