我在互联网上搜索以找到问题的解决方案,但我找不到有效的解决方案。
因此,我尝试将parse
个Json
个数据投放到应用async
,url
。
现在,这是我用来调用API的代码:
namespace RadioApp.Model
{
public static class APIManager
{
public const string baseUrl = "https://www.sunnieday.nl/api/radio/stats/info";
// This adds base url.
public static string GenerateUrl(string urlString)
{
return string.Format(baseUrl + urlString);
}
// Metod 1: Downloading all the base data from current DJ
public static async Task<APIResponse> GetListenPageData()
{
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Accept", "Application/json");
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36");
//Methode GetStringAsync gaat via een url de nodige data ophalen.
string result = await client.GetStringAsync(baseUrl);
Debug.WriteLine("Result: " + result);
// De Json string naar objecten van onze klasses
var data = JsonConvert.DeserializeObject<APIResponse>(result);
Debug.WriteLine("data: " + data);
return data;
}
}
这将返回如下数据:
[0:] Result: {"data":{"listeners":26,"song":"Ed Sheeran - Bibia Be Ye Ye","live_dj":"Auto DJ","mini_rooster":[],"song_history":[{"playedat":1509537573,"title":"Ed Sheeran - Bibia Be Ye Ye","metadata":{"tit2":"Ed Sheeran - Bibia Be Ye Ye"}},{"playedat":1509537292,"title":"Katy Perry - Swish Swish","metadata":{"tit2":"Katy Perry - Swish Swish"}},{"playedat":1509536950,"title":"Fall Out Boy - Champion","metadata":{"tit2":"Fall Out Boy - Champion"}},{"playedat":1509536744,"title":"J Balvin - Mi Gente (Original Mix)","metadata":{"tit2":"J Balvin - Mi Gente (Original Mix)"}},{"playedat":1509536364,"title":"Axwell and Ingrosso - On My Way","metadata":{"tit2":"Axwell and Ingrosso - On My Way"}},{"playedat":1509536095,"title":"Green Day - Boulevard Of Broken Dreams","metadata":{"tit2":"Green Day - Boulevard Of Broken Dreams"}},{"playedat":1509535745,"title":"Bingo Players - Knock You Out","metadata":{"tit2":"Bingo Players - Knock You Out"}},{"playedat":1509535520,"title":"Rockwell - Somebody's Watching Me","metadata":{"tit2":"Rockwell - Somebody's Watching Me"}},{"playedat":1509535118,"title":"DJ Snake ft. Lauv - A Different Way","metadata":{"tit2":"DJ Snake ft. Lauv - A Different Way"}},{"playedat":1509534885,"title":"Miley Cyrus - Malibu","metadata":{"tit2":"Miley Cyrus - Malibu"}}]}}
现在,我试图用它来制作物品(我不知道如何使用它们),但在这里它根本不起作用......
我使用&#34;粘贴特殊作为Json Classes&#34;在VisualStudio中命令然后我得到这个:
namespace RadioApp.Model
{
public class APIResponse
{
public class Rootobject
{
public Data data { get; set; }
}
public class Data
{
public int listeners { get; set; }
public string song { get; set; }
public string live_dj { get; set; }
public object[] mini_rooster { get; set; }
public Song_History[] song_history { get; set; }
}
public class Song_History
{
public int playedat { get; set; }
public string title { get; set; }
public Metadata metadata { get; set; }
}
public class Metadata
{
public string tit2 { get; set; }
}
}
}
现在,当我尝试访问我制作的ListenPage.xaml.cs
中的代码(并用作基页)时,它不会加载数据并返回一个巨大的错误;
Loaded assembly: System.Runtime.Serialization.dll [External]
[0:] Newtonsoft.Json.JsonSerializationException: Unable to find a constructor to use for type RadioApp.Model.Data. A class should either have a default constructor, one constructor with arguments or a constructor marked with the JsonConstructor attribute. Path 'data', line 1, position 8.
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateNewObject (Newtonsoft.Json.JsonReader reader, Newtonsoft.Json.Serialization.JsonObjectContract objectContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, Newtonsoft.Json.Serialization.JsonProperty containerProperty, System.String id, System.Boolean& createdFromNonDefaultCreator) [0x000d5] in <91135d4732444fbda60dae87939ac9ab>:0
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject (Newtonsoft.Json.JsonReader reader, System.Type objectType, Newtonsoft.Json.Serialization.JsonContract contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, System.Object existingValue) [0x0013f] in <91135d4732444fbda60dae87939ac9ab>:0
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal (Newtonsoft.Json.JsonReader reader, System.Type objectType, Newtonsoft.Json.Serialization.JsonContract contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, System.Object existingValue) [0x0006d] in <91135d4732444fbda60dae87939ac9ab>:0
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType, System.Boolean checkAdditionalContent) [0x000db] in <91135d4732444fbda60dae87939ac9ab>:0
at Newtonsoft.Json.JsonSerializer.DeserializeInternal (Newtonsoft.Json.JsonReader reader, System.Type objectType) [0x00053] in <91135d4732444fbda60dae87939ac9ab>:0
at Newtonsoft.Json.JsonSerializer.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType) [0x00000] in <91135d4732444fbda60dae87939ac9ab>:0
at Newtonsoft.Json.JsonConvert.DeserializeObject (System.String value, System.Type type, Newtonsoft.Json.JsonSerializerSettings settings) [0x0002d] in <91135d4732444fbda60dae87939ac9ab>:0
at Newtonsoft.Json.JsonConvert.DeserializeObject[T] (System.String value, Newtonsoft.Json.JsonSerializerSettings settings) [0x00000] in <91135d4732444fbda60dae87939ac9ab>:0
at Newtonsoft.Json.JsonConvert.DeserializeObject[T] (System.String value) [0x00000] in <91135d4732444fbda60dae87939ac9ab>:0
at RadioApp.Model.APIManager+<GetListenPageData>d__2.MoveNext () [0x000eb] in C:\Users\Robin\Documents\Sunnieday\SunniedayRadio\RadioApp\RadioApp\RadioApp\Model\APIManager.cs:34
现在,您可以看到我打电话来获取数据的方法:
public partial class ListenPage : ContentPage
{
public ListenPage()
{
InitializeComponent();
ShowLisenPageData();
}
private async Task ShowLisenPageData()
{
try
{
APIResponse data = await APIManager.GetListenPageData();
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
}
我已经尝试了什么?
我已经尝试过添加基础构造函数&#34;通过向所有课程添加public Data() {}
等...,没有工作。
我试着做这个解决方案:
在&#39; Android选项中&#39;项目属性的选项卡,有一个 &#39;接头&#39;标签。是否已选择&#39;链接&#39;下拉&#34; Sdk 仅限装配&#34;或者是&#34; Sdk和用户程序集&#34;?
如果是后者,则跳过无参数构造函数 链接,因为没有检测到使用。因此,将其更改为&#34; Sdk Assemblies 仅&#34;
也没有工作,所以我现在没有选择,有人可以帮我解决这个问题吗?