ساختار JSON ارائههای یک پروژه در GitHub
ساختار کلی اطلاعات ارائههای یک پروژه در GitHub چنین شکلی را دارد:
[ { release_info, "assets": [ { } ] } ]
تهیهی کلاسهای معادل فرمت JSON ارائههای برنامه در GitHub
اگر بخواهیم قسمتهای مهم خروجی JSON فوق را تبدیل به کلاسهای معادل دات نتی کنیم، به دو کلاس ذیل خواهیم رسید:
using Newtonsoft.Json; using System; namespace ApplicationAnnouncements { public class GitHubProjectRelease { [JsonProperty(PropertyName = "url")] public string Url { get; set; } [JsonProperty(PropertyName = "assets_url")] public string AssetsUrl { get; set; } [JsonProperty(PropertyName = "upload_url")] public string UploadUrl { get; set; } [JsonProperty(PropertyName = "html_url")] public string HtmlUrl { get; set; } [JsonProperty(PropertyName = "id")] public int Id { get; set; } [JsonProperty(PropertyName = "tag_name")] public string TagName { get; set; } [JsonProperty(PropertyName = "target_commitish")] public string TargetCommitish { get; set; } [JsonProperty(PropertyName = "name")] public string Name { get; set; } [JsonProperty(PropertyName = "body")] public string Body { get; set; } [JsonProperty(PropertyName = "draft")] public bool Draft { get; set; } [JsonProperty(PropertyName = "prerelease")] public bool PreRelease { get; set; } [JsonProperty(PropertyName = "created_at")] public DateTime CreatedAt { get; set; } [JsonProperty(PropertyName = "published_at")] public DateTime PublishedAt { get; set; } [JsonProperty(PropertyName = "assets")] public Asset[] Assets { get; set; } } public class Asset { [JsonProperty(PropertyName = "url")] public string Url { get; set; } [JsonProperty(PropertyName = "id")] public int Id { get; set; } [JsonProperty(PropertyName = "name")] public string Name { get; set; } [JsonProperty(PropertyName = "label")] public string Label { get; set; } [JsonProperty(PropertyName = "content_type")] public string ContentType { get; set; } [JsonProperty(PropertyName = "state")] public string State { get; set; } [JsonProperty(PropertyName = "size")] public int Size { get; set; } [JsonProperty(PropertyName = "download_count")] public int DownloadCount { get; set; } [JsonProperty(PropertyName = "created_at")] public DateTime CreatedAt { get; set; } [JsonProperty(PropertyName = "updated_at")] public DateTime UpdatedAt { get; set; } } }
پس از تشکیل این کلاسها، مرحلهی بعد، دریافت اطلاعات JSON از آدرس API ارائههای پروژه در GitHub و سپس نگاشت آنها میباشد:
using (var webClient = new WebClient()) { webClient.Headers.Add("user-agent", "DNTProfiler"); var jsonData = webClient.DownloadString(url); var gitHubProjectReleases = JsonConvert.DeserializeObject<GitHubProjectRelease[]>(jsonData); foreach (var release in gitHubProjectReleases) { foreach (var asset in release.Assets) { // … } } }
یک نکته: اگر به صفحهی اصلی ارائههای یک پروژه در GitHub دقت کنید، شمارهی تعداد بار دریافت یک ارائه مشخص نشدهاست. در این API، عدد DownloadCount، بیانگر تعداد بار دریافت پروژهی شما است.