Rally c#API - 将DynamicJsonObject转换为类对象

时间:2017-01-25 13:57:22

标签: c# json dynamic rally

我正在构建自己的应用程序以与Rally API通信。

我所拥有的是Rally c# SDK已安装并已将JSON响应转换为强类型类。

我正在通过以下方式转换它们:

  1. 获取dynamicJsonObject
  2. 将其转换为字典
  3. 将字典序列化为JSON
  4. 将JSON反序列化到我的班级。
  5. 以下是我的代码片段:

     var taskRequest = new Request()
        {
            ArtifactName = "task",
            Query = new Query("WorkProduct.OID", Query.Operator.Equals, userstory.ObjectID.ToString())
        };
        QueryResult queryTaskResult = api.Query(taskRequest);
        if (queryTaskResult.TotalResultCount > 0)
        {
            foreach (DynamicJsonObject result in queryTaskResult.Results)
            {
                var json = JsonConvert.SerializeObject(result.ToDictionary());
                var task = JsonConvert.DeserializeObject<RallyDataTypes.Task>(json);
                userstory.TaskList.Add(task);
            }
        }
    

    这个&#39;工作&#39;但它感觉非常低效,并且加载较大的用户故事很慢。

    问题:

    是否有更好的&#39; /&#39;对&#39;这样做的方法?我问,因为我之前不必使用这些数据类型。

    干杯

    修改 一些答案是使用JSON.net。我目前正在使用它来做我的转换器,我的问题更具体地与Type Rally SDK返回给我,我无法访问原始JSON,因为它从我身上抽象出来。

    类型说明

    DynamicJsonObject  = A type from the Rally SDK
    queryTaskResult.Results = IEnumerable<dynamic>
    result = DynamicJsonObject
    

1 个答案:

答案 0 :(得分:0)

您可以直接在返回的JSON字符串上使用JsonConvert.DeserializeObject,并将其转换为所需的类。不需要字典。

var task = JsonConvert.DeserializeObject<RallyDataTypes.Task>(queryTaskResult.Results);
userstory.TaskList.Add(task);

它将处理将JSON对象字段匹配到C#中的各自属性。