【问题标题】:JIRA REST API, JSON response, C#JIRA REST API、JSON 响应、C#
【发布时间】:2017-03-09 06:32:18
【问题描述】:

我想从板上获取问题并打印问题摘要(使用 JIRA Rest API:https://docs.atlassian.com/jira-software/REST/cloud/#agile/1.0/board-getIssuesForBoard),但我不想获取所有问题的字段,我需要字段:“sprint”和“epic”。

我有错误:

未处理的异常:System.NullReferenceException:对象引用 未设置为对象的实例。

在线:

var response = client.RestClient.ExecuteRequest<ResponseIssues>(Method.GET, 
                        @"/rest/agile/1.0/board/2/issue?fields='epic,sprint'");

代码(C#):

var client = Atlassian.Jira.Jira.CreateRestClient(jiraurl, login, password);
var response = client.RestClient.ExecuteRequest<ResponseIssues>(Method.GET, 
                       @"/rest/agile/1.0/board/2/issue?fields='epic,sprint'");
foreach (var issue in response.issues)
{
     Console.WriteLine(issue.fields.epic.summary);
}

类响应问题 (C#):

public class ResponseIssues
{
    public string expand;
    public int startAt;
    public int maxResults;
    public int total;
    public List<Issue_> issues;
}    
public class Issue_
{
    public string expand;
    public string id;
    public string self;
    public string key;
    public Field fields;
}    
public class Field
{
    public Sprint sprint;
    public Epic epic;            
}   
public class Sprint
{
    public int id;
    public string self;
    public string state;
    public string name;
}    
public class Epic
{
    public int id;
    public string self;
    public string name;
    public string summary;
    public Color color;
    public bool done;
}    
public class Color
{
    public string key;
}

【问题讨论】:

  • 您可以启用请求跟踪:bitbucket.org/farmas/atlassian.net-sdk/wiki/… 无论如何,您能检查一下哪些值为空吗?是 RestClient、response 还是别的什么?由于某些错误的结果,您可能无法将结果反序列化为“ResponseIssues”。
  • @kat1330,我无法获得“归档”中的所有内容。我尝试获取“描述”,但出现错误:“对象引用未设置为对象的实例。”

标签: c# json rest jira jira-rest-api


【解决方案1】:

似乎有些东西没有正确初始化。每当这种情况发生在我身上时,我都会用分配来分解链,以尝试找出哪个对象为空。还要捕获异常,并在 Visual Studio 中进行探索。在你的情况下,试试这个:

try{
  var client = Atlassian.Jira.Jira.CreateRestClient(jiraurl, login, password);
  // Add breakpoint... is client null? There could be an issue with your login, password or the url you've passed. 
  // Or maybe it's Atlassian.Jira.CreateRestClient (instead of Jira.Jira.CreateRestClient), though that should get flagged by the compiler unless there's some recursion or parenting in the Jira namespace
  var restClient = client.RestClient; 
  // Add breakpoint... is restClient null? Could be that CreateRestClient is lazy-loading, in which case I'd look at the url, login and password again.
  var response = restClient.ExecuteRequest<ResponseIssues>(Method.GET, 
                   @"/rest/agile/1.0/board/2/issue?fields='epic,sprint'");
}
catch(Exception ex)
{
  Console.WriteLine(ex); // Or just breakpoint here and explore the exception.
}

【讨论】:

  • 空引用异常在:“Console.WriteLine(issue.fields.epic.summary);”
  • thnx,我发现错误:它不在代码中,在 jira 问题中没有 sprint。
  • 我无法获得的“归档”中的所有内容。我尝试获取“描述”,但出现错误:“对象引用未设置为对象的实例。”
【解决方案2】:

Simply Travels “issues”=>“fields” 得到了您的“sprint”和“epic”。

【讨论】:

  • 如果你读过我的代码,你就会明白——我做到了。但我不知道我做错了什么。:\
【解决方案3】:
 var response = client.RestClient.ExecuteRequest<ResponseIssues>(Method.GET, 
                        @"/rest/agile/1.0/board/2/issue?fields='epic,sprint'");
            var jo = JObject.Parse(response);
            var id = jo["issues"]["fields"]['sprint']['id'].ToString();
            var self= jo["issues"]["fields"]['sprint']['self'].ToString();
            var state= jo["issues"]["fields"]['sprint']['state'].ToString();
            var name= jo["issues"]["fields"]['sprint']['name'].ToString();
            Console.WriteLine(id);
            Console.WriteLine(self);
            Console.WriteLine(state);
            Console.WriteLine(name);
            Console.Read();

【讨论】:

  • 这对 OP 没有帮助,因为第一行是发生空引用异常的地方。
猜你喜欢
  • 1970-01-01
  • 2016-12-14
  • 2019-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多