Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.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# Json反序列化解析无效的Json对象_C#_.net_Json_Api_Deserialization - Fatal编程技术网

C# Json反序列化解析无效的Json对象

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

我正在尝试将从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.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>>();
        }