C# 如何在我的UWP项目中使用NewsApi.org?

C# 如何在我的UWP项目中使用NewsApi.org?,c#,xml,xaml,uwp,C#,Xml,Xaml,Uwp,我正在使用C#和UWP xml创建一个新闻提要。就像一个手机新闻小部件,但用于计算机。我偶然发现,觉得很有趣。但是我不知道如何实现,而且这个api网站也没有任何关于C#的教程。我如何使用它,如何在我创建的3个文本块上显示文章.标题,文章.作者和文章.说明 编辑:我找到了一个c#的视频,但它是console.writeline的,不是xaml的头版。 所以我做的是创建一个新的class.cs文件 using System; using System.Collections.Generic; usi

我正在使用C#和UWP xml创建一个新闻提要。就像一个手机新闻小部件,但用于计算机。我偶然发现,觉得很有趣。但是我不知道如何实现,而且这个api网站也没有任何关于C#的教程。我如何使用它,如何在我创建的3个文本块上显示文章.标题,文章.作者和文章.说明

编辑:我找到了一个c#的视频,但它是console.writeline的,不是xaml的头版。 所以我做的是创建一个新的class.cs文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NewsAPI;
using NewsAPI.Models;
using NewsAPI.Constants;
using System.Net.Http;
using Newtonsoft.Json;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.IO;

namespace news
{
public class newsapi
{
    HttpClient client = new HttpClient();
    //public static async void Main(string[] args)
    //{

    //    newsapi program = new newsapi();
    //    await program.GetArticles();
    //}
    //public async Task GetArticles()
    //{
    //    string response = await client.GetStringAsync("https://newsapi.org/v2/top-headlines?sources=bbc-news&apiKey=06112b69bb054cfeb70bbf188873f98e");
    //    NewsResponse newsObject = JsonConvert.DeserializeObject<NewsResponse>(response);
    //}

    public async static Task<Article> GetArticlesMain()
    {
        var http = new HttpClient();
        var response = await http.GetAsync("https://newsapi.org/v2/top-headlines?sources=bbc-news&apiKey=06112b69bb054cfeb70bbf188873f98e");
        var result = await response.Content.ReadAsStringAsync();
        var serializer = new DataContractJsonSerializer(typeof(Article));

        var ms = new MemoryStream(Encoding.UTF8.GetBytes(result));
        var data = (Article)serializer.ReadObject(ms);

        return data;
    }

    [DataContract]
    public class NewsResponse
    {
        [DataMember]
        public string status { get; set; }
        [DataMember]
        public int totalResults { get; set; }
        [DataMember]
        public List<Article> Articles { get; set; }
    }
    [DataContract]
    public class Article
    {
        [DataMember]
        public string Title { get; set; }
    }

    }
}

但是textblock没有显示任何内容,并且在“tbContent.Text=article.Title”这一行中抛出了一个未处理的异常用户,该行表示“值不能为null”。那么发生了什么以及如何修复它呢?

当您从网络获取Json字符串时,如果您想转换为一个类型,您需要提供一个与Json结构相对应的类

var serializer = new DataContractJsonSerializer(typeof(Article));
这里是主要问题,获得的json字符串应该是
NewsResponse
类型,因此应该是这样的:

var serializer=newdatacontractjsonserializer(typeof(Article));

这是一个完整的过程:

News.cs

公共类新闻API
{
公共异步静态任务GetArticlesMain()
{
var http=new-HttpClient();
var response=wait http.GetAsync(“您的新闻url”);
var result=await response.Content.ReadAsStringAsync();
var data=JsonConvert.DeserializeObject(结果);
返回数据。文章;
}
}
公共类新闻回应
{
公共字符串状态{get;set;}
公共整数totalResults{get;set;}
公共列表项目{get;set;}
}
公共类文章
{
公共源{get;set;}
公共字符串作者{get;set;}
公共字符串标题{get;set;}
公共字符串说明{get;set;}
公共字符串url{get;set;}
公共字符串urlToImage{get;set;}
public DateTime publishedAt{get;set;}
公共字符串内容{get;set;}
}
公共类源
{
公共字符串id{get;set;}
公共字符串名称{get;set;}
}
News.xaml.cs

private async void页面\u已加载(对象发送方,RoutedEventArgs e)
{
List articles=wait NewsApi.GetArticlesMain();
tbContent.Text=articles.First().title;
}

您好,您提供的代码包含
ApiKey
,这是敏感数据,请删除我的天啊,真是个天才!非常感谢!我可以知道你到底换了什么吗?[DataMember]还有什么用途?我在OpenWeatherMap的教程中看到了它,但为什么它在这里不起作用?
var serializer = new DataContractJsonSerializer(typeof(Article));