用于保存gerrit的JSON数据的通用类

时间:2017-02-28 12:17:38

标签: c# json gerrit

问题在于,获取所有组的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响应给我一些建议吗?

1 个答案:

答案 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);
    }
}