簡體   English   中英

使用C#在Jira-Rest-Api中搜索過濾器

[英]Searching for Filter in Jira-Rest-Api with C#

我試圖使用c#HttpWebRequest和Rest-Api從實際用戶搜索所有喜歡的過濾器(JIRA)。 我仍然可以閱讀問題,但過濾器無法正常工作。

閱讀問題的工作原理如下:

例如,我有這個URL來從項目IT獲取所有問題:

http://jira-test.myServer.de/rest/api/2/search?jql=project=%22IT%22

我使用DataContractJsonSerializer將JSON響應交換到C# - 對象。

從這個類我得到序列化后的對象:

[DataContract]
internal class Kopf
{
    [DataMember]
    public string startAt = string.Empty;

    [DataMember]
    public string maxResults = string.Empty;

    [DataMember]
    public string total = string.Empty;

    [DataMember]
    public Issues[] issues = null;
}

JSON的第一行看起來像這樣:

{"expand":"schema,names","startAt":0,"maxResults":50,"total":23044,"issues":[{"expand":"operations,editmeta,changelog,transitions,renderedFields","id":"40000","self":"http://jira-test.myServer.de/rest/api/2/issue/40000","key":"IT-23237","fields":

所以我無法理解為什么以下內容對我不起作用:這個URL在瀏覽器中為我提供了正確的JSON:

http://jira-test.myServer.de/rest/api/2/filter/favourite

第一行JSON:

[{"self":"http://jira-test.myServer.de/rest/api/2/filter/10119","id":"10119","name":"Aktiv","description":"Alle Aufgaben die gerade aktiv von mir bearbeitet werden.","owner":{"self":"http://jira-test.myServer.de/rest/api/2/user?username=sb9923","key":"sb9923","name":"sb9923","avatarUrls":{"16x16":"http://jira-test.myServer.de/secure/useravatar?

這是我想要序列化的對象:

[DataContract]
internal class FilterData
{
    [DataMember]
    public FilterKopf[] filter = null;
}

[DataContract]
internal class FilterKopf
{
    [DataMember]
    public string id = string.Empty;

    [DataMember]
    public string name = string.Empty;

    [DataMember]
    public string description = string.Empty;

    [DataMember]
    public string jql = string.Empty;
}

我沒有得到任何異常或其他東西,但FilterData-Object中的FilterKopf數組始終為null。

我希望有人可以幫助我。 我認為我的C#-Class是問題,因為JSON似乎很好,我的瀏覽器提供了正確的輸出。

如果我理解正確你的問題是結果包含一個“過濾器”對象數組,但你想將它反序列化為一個包含數組的簡單對象。 所以你需要的是將流反序列化為FilterKopf[]而不是FilterData

我根據這個答案創建了一個簡單的請求(我稍微修改了一下,例如不是POST而是GET)

public class JiraTest
{
    internal IEnumerable<FilterKopf> GetFavouriteFilters()
    {
        string url = "http://jira-test.myserver.de/rest/api/2/filter/favourite";

        var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = "GET";
        httpWebRequest.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("YOUR_USERNAME:YOUR_PASSWORD"));

        var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(FilterKopf[]));
        var filterKoepfe = (FilterKopf[])serializer.ReadObject(httpResponse.GetResponseStream());

        return filterKoepfe;
    }
}

[DataContract]
internal class FilterKopf
{
    [DataMember]
    public string id = string.Empty;

    [DataMember]
    public string name = string.Empty;

    [DataMember]
    public string description = string.Empty;

    [DataMember]
    public string jql = string.Empty;
}

使用我自己的帳戶並訪問我們的Jira服務器,結果真的反映了我最喜歡的過濾器。

更新

作為第二次機會,嘗試使用Json.NET而不是DataContractJsonSerializer。 通過NuGet添加到項目中,並將這兩行反序列化替換為:

FilterKopf[] filterKoepfe = null;
using (Stream stream = httpResponse.GetResponseStream())
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
    string jsonResponse = reader.ReadToEnd();
    filterKoepfe = Newtonsoft.Json.JsonConvert.DeserializeObject<FilterKopf[]>(jsonResponse);
}

我們來看看這是做什么的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM