Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我不知道如何从api中提取变量_C#_Uwp - Fatal编程技术网

C# 我不知道如何从api中提取变量

C# 我不知道如何从api中提取变量,c#,uwp,C#,Uwp,我已经尝试在我的项目中解决这个问题一段时间了,get笑话返回空值,即使我没有任何错误。我正在尝试制作一个只显示一个简单笑话的应用程序。api链接在这里 这是我第一次在这里穿衣服,所以我可能做错了,但是如果有人能帮我,我会很感激的 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Newtonsoft.Js

我已经尝试在我的项目中解决这个问题一段时间了,get笑话返回空值,即使我没有任何错误。我正在尝试制作一个只显示一个简单笑话的应用程序。api链接在这里

这是我第一次在这里穿衣服,所以我可能做错了,但是如果有人能帮我,我会很感激的

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

namespace JokeApp.Classes
{
    public class Main
    {
        [JsonProperty("category")]
        public string Category { get; set; }

        [JsonProperty("type")]
        public string Type { get; set; }

        [JsonProperty("setup")]
        public string Setup { get; set; }

        [JsonProperty("delivery")]
        public string Delivery { get; set; }

        [JsonProperty("id")]
        public int Id { get; set; }
    }

    public class catagories
    {
        [JsonProperty("categories")]
        public List<String> Categories { get; set; }
    }

    public class main
    {
        [JsonProperty("Main")]
        public Main Main { get; set; }

        [JsonProperty("categories")]
        public string catogories { get; set; }
    }
}

来自sv443的响应看起来将反序列化为类Main的对象,而不是类Main的对象。所以你可能想要:

Main mc=wait response.Content.ReadAsAsync

而不是

main mc=wait response.Content.ReadAsAsync

总的来说,有两个只在大小写上不同的类定义是个坏主意,正是因为这种类型的问题可能会发生


如果不是这样,请尝试将您的响应内容记录为字符串,然后查看其中的实际内容。

您能说出为什么它应该是main而不是main吗?您是否尝试打印、记录或调试完整的响应内容并查看。感谢您使用我的API!如果您还没有解决这个问题,可以参考C示例。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Net.Http;
using Windows.UI.Popups;

namespace JokeApp.Classes
{
    class CardWrapper
    {
        public static async Task<Main> Getjokes()
        {
            Uri request = new Uri(@"https://sv443.net/jokeapi/category/any");

            HttpClient client = new HttpClient();
            client.DefaultRequestHeaders.Add("User_Agent" ,"JokeApp");
            HttpResponseMessage respons = await client.GetAsync(request);

            if (respons.IsSuccessStatusCode == false)
            {
                MessageDialog md = new MessageDialog("Cant find jokes!!");
                await md.ShowAsync();
            }

            respons.EnsureSuccessStatusCode();

            main mc = await respons.Content.ReadAsAsync<main>();

            return mc.Main;
        }
    }
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

using JokeApp.Classes;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using static JokeApp.Classes.Main;

// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace JokeApp
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page,INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        public MainPage()
        {
            this.InitializeComponent();
            Getjokes();
        }

        private Main _joke = new Main();

        public Main Jokes
        {
            get { return _joke; }
            set { _joke = value; NotifyPropertyChanged(); }
        }

        private async void Getjokes()
        {
           Jokes  = await CardWrapper.Getjokes();
        }
    }
}