C# Json反序列化解析无效的Json对象
我正在尝试将从Web API检索的Json对象反序列化为强类型对象列表,如下所示: WebClient wc=新的WebClient()C# Json反序列化解析无效的Json对象,c#,.net,json,api,deserialization,C#,.net,Json,Api,Deserialization,我正在尝试将从Web API检索的Json对象反序列化为强类型对象列表,如下所示: WebClient wc=新的WebClient() //下载并反序列化Json文件 var jsonMain=wc.DownloadString(“http://api.flexianalysis.com/services/FlexiAnalysisService.svc/FlexiAnalysisNews?key=___&catagory=Forex"); JObject-token2=JObject.Par
//下载并反序列化Json文件
var jsonMain=wc.DownloadString(“http://api.flexianalysis.com/services/FlexiAnalysisService.svc/FlexiAnalysisNews?key=___&catagory=Forex");
JObject-token2=JObject.Parse(jsonMain);
List listNews=新列表();
foreach(变量结果为token2[“d”])
{
新闻=新新闻();
news.id=(字符串)结果[“id”];
news.Title=(字符串)结果[“Title”];
news.Date=(字符串)结果[“PublishingDate”];
news.Content=(字符串)结果[“news”];
添加(新闻);
}
返回视图(listNews);
问题是,我总是以1字符串的形式得到结果,因为解析器没有解析有效的Json对象。(我猜这是一个无效字符,无法正确解析)
有人有什么想法吗?您需要
JArray results=JArray.Parse(token2[“d”].ToString())代码>
请试一试
WebClient wc = new WebClient();
// Downloading & Deserializing the Json file
var jsonMain = wc.DownloadString("http://api.flexianalysis.com/services/FlexiAnalysisService.svc/FlexiAnalysisNews?key=gZ_lhbJ_46ThmvEki2lF&catagory=Forex");
JObject token2 = JObject.Parse(jsonMain);
JArray results = JArray.Parse(token2["d"].ToString());
List<News> listNews = new List<News>();
foreach (var result in results)
{
news = new News();
news.id = (string)result["ID"];
news.Title = (string)result["Title"];
news.Date = (string)result["PublishingDate"];
news.Content = (string)result["News"];
listNews.Add(news);
}
return View(listNews);
WebClient wc=新的WebClient();
//下载并反序列化Json文件
var jsonMain=wc.DownloadString(“http://api.flexianalysis.com/services/FlexiAnalysisService.svc/FlexiAnalysisNews?key=gZ_lhbJ_46ThmvEki2lF&catagory=Forex");
JObject-token2=JObject.Parse(jsonMain);
JArray results=JArray.Parse(token2[“d”].ToString());
List listNews=新列表();
foreach(结果中的var结果)
{
新闻=新新闻();
news.id=(字符串)结果[“id”];
news.Title=(字符串)结果[“Title”];
news.Date=(字符串)结果[“PublishingDate”];
news.Content=(字符串)结果[“news”];
添加(新闻);
}
返回视图(listNews);
测试:
您也可以尝试使用字典
:
var root=JsonConvert.DeserializeObject(jsonMain);
List news=root[“d”]。选择(结果=>newnews()
{
id=结果[“id”]作为字符串,
Title=结果[“Title”]作为字符串,
日期=结果[“PublishingDate”]作为字符串,
内容=结果[“新闻”]作为字符串
}).ToList();
返回视图(新闻);
可以是备选方案
class News
{
[JsonProperty("ID")]
public int id { get; set; }
[JsonProperty("Title")]
public string Title { get; set; }
[JsonProperty("PublishingDate")]
public DateTime Date { get; set; }
[JsonProperty("News")]
public string Content { get; set; }
}
WebClient实现IDisPoble接口。在一个环境中使用它并不坏
using (WebClient wc = new WebClient())
{
var jsonMain = wc.DownloadString("http://api.flexianalysis.com/services/FlexiAnalysisService.svc/FlexiAnalysisNews?key=gZ_lhbJ_46ThmvEki2lF&catagory=Forex");
JObject token2 = JObject.Parse(jsonMain);
string s = token2["d"].ToString();
List<News> list = JArray.Parse(s).ToObject<List<News>>();
}
使用(WebClient wc=new WebClient())
{
var jsonMain=wc.DownloadString(“http://api.flexianalysis.com/services/FlexiAnalysisService.svc/FlexiAnalysisNews?key=gZ_lhbJ_46ThmvEki2lF&catagory=Forex");
JObject-token2=JObject.Parse(jsonMain);
字符串s=token2[“d”].ToString();
List=JArray.Parse.ToObject();
}
那么您想要一个JSON解析器来解析非JSON吗?d
的内容是一个有效的JSON。我只是想象了一下,这是行不通的。您将获得“附加信息:转换值时出错…”
class News
{
[JsonProperty("ID")]
public int id { get; set; }
[JsonProperty("Title")]
public string Title { get; set; }
[JsonProperty("PublishingDate")]
public DateTime Date { get; set; }
[JsonProperty("News")]
public string Content { get; set; }
}
using (WebClient wc = new WebClient())
{
var jsonMain = wc.DownloadString("http://api.flexianalysis.com/services/FlexiAnalysisService.svc/FlexiAnalysisNews?key=gZ_lhbJ_46ThmvEki2lF&catagory=Forex");
JObject token2 = JObject.Parse(jsonMain);
string s = token2["d"].ToString();
List<News> list = JArray.Parse(s).ToObject<List<News>>();
}