C#从JSON获取值

我有一个json文本,我想获取作者姓名和描述标签的值。不需要其他字段,例如url和urltoimage等。当我运行以下代码时,不提供任何字符串值。我认为这里有些错误。

{

"status": "ok",

"articles": [

{

"source": {

"id": "techcrunch",

"name": "TechCrunch"

},

"author": "Khaled \"Tito\" Hamze",

"title": "Crunch Report",

"description": "Your daily roundup of the biggest TechCrunch stories and startup news.",

"url": "https://techcrunch.com/video/crunchreport/",

"urlToImage": "https://tctechcrunch2011.files.wordpress.com/2015/03/tccrshowogo.jpg?w=500&h=200&crop=1",

"publishedAt": "2017-12-11T20:20:09Z"

},

{

"source": {

"id": "techcrunch",

"name": "TechCrunch"

},

"author": "Sarah Perez",

"title": "Facebook is trying to make the Poke happen again",

"description": "Facebook's \"Poke\" feature has never really gone away, but now the social network is giving it a more prominent placement - and is even considering expanding..",

"url": "https://techcrunch.com/2017/12/11/facebook-is-trying-to-make-the-poke-happen-again/",

"urlToImage": "https://tctechcrunch2011.files.wordpress.com/2017/12/facebook-poke-icon.jpg",

"publishedAt": "2017-12-11T20:02:30Z"

},

{

"source": {

"id": "techcrunch",

"name": "TechCrunch"

},

"author": "Sarah Perez",

"title": "Amazon Alexa can now wake you up to music",

"description": "This fall, Amazon made a play to become your new alarm clock with the introduction of a combination smart speaker and clock called the Echo Spot. Today, the..",

"url": "https://techcrunch.com/2017/12/11/amazon-alexa-can-now-wake-you-up-to-music/",

"urlToImage": "https://tctechcrunch2011.files.wordpress.com/2017/09/amazon-event-9270069.jpg",

"publishedAt": "2017-12-11T17:22:30Z"

},

{

"source": {

"id": "techcrunch",

"name": "TechCrunch"

},

"author": "Ingrid Lunden, Katie Roof",

"title": "Apple confirms Shazam acquisition; Snap and Spotify also expressed interest",

"description": "After we broke the story last week that Apple was acquiring London-based music and image recognition service Shazam, Apple confirmed the news today. It is..",

"url": "https://techcrunch.com/2017/12/11/apple-shazam-deal/",

"urlToImage": "https://tctechcrunch2011.files.wordpress.com/2017/12/shazam-app-icon-ios.jpg",

"publishedAt": "2017-12-11T15:59:31Z"

}

]}

怎么得到这个?下面是我的代码,它根本不起作用

var data = (JObject)JsonConvert.DeserializeObject(myJSON);

string nameArticles= data["articles"].Value<string>();

MessageBox.Show(nameArticles);

public class Source

{

public string id { get; set; }

public string name { get; set; }

}

public class Article

{

public Source source { get; set; }

public string author { get; set; }

public string title { get; set; }

public string description { get; set; }

public string url { get; set; }

public string urlToImage { get; set; }

public DateTime publishedAt { get; set; }

}

Article art = new Article();

art = JsonConvert.DeserializeObject<Article>(myJSON);

MessageBox.Show(art.description.ToString());

上面的代码返回对象未设置为实例错误!

回答:

假设您希望反序列化为具体的类(按照问题中第二种尝试的方法),那么您需要一个包装器类来容纳整个对象,然后对此进行反序列化。

目前,您正在尝试将整个对象序列化为Article,但是只有该对象articles数组中的单个对象才能与您的Article类中的结构匹配。

您试图在错误的对象级别执行操作,并且您忘记articles了列表(数组)这一事实。

像这样:

public class JSONResponse

{

public string status { get; set; }

public List<Article> articles { get; set; }

}

JSONResponse response = JsonConvert.DeserializeObject<JSONResponse>(myJSON);

然后,您可以使用普通循环遍历response.articles列表并提取作者姓名和描述。

以上是 C#从JSON获取值 的全部内容, 来源链接: utcz.com/qa/424270.html

回到顶部