C# 我不知道如何从api中提取变量
我已经尝试在我的项目中解决这个问题一段时间了,get笑话返回空值,即使我没有任何错误。我正在尝试制作一个只显示一个简单笑话的应用程序。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
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();
}
}
}