Xamarin无法找到用于类型xxx.xxx.xxx的构造函数

时间:2017-11-01 12:12:11

标签: c# json serialization xamarin.forms

我在互联网上搜索以找到问题的解决方案,但我找不到有效的解决方案。

因此,我尝试将parseJson个数据投放到应用asyncurl

现在,这是我用来调用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;

也没有工作,所以我现在没有选择,有人可以帮我解决这个问题吗?

0 个答案:

没有答案