2017-02-28 26 views
0

问题是,获取所有组的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响应的建议吗?

+0

可能使用http://jsonlint.com/来验证json,例如“visible_to_all”:true *,* - 逗号可能是解析错误的原因。 – Vladimir

回答

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); 
    } 
} 
+0

事实上,这是我不明白的。非常感谢你!它像一个魅力! – UrsulRosu