正在尝试解析RESTful api响应

本文关键字:RESTful api 响应 | 更新日期: 2023-09-27 18:25:54

我遇到了一个问题,在谷歌上似乎找不到任何关于如何解决它的线索。我正在尝试解析RESTful api服务的响应。

[{"account_id":"5401585","history":"84967869|2|03'/30'/2012,84972342|2|03'/30'/2012,85312563|2|04'/02'/2      012,85314831|2|04'/02'/2012,85318847|2|04'/02'/2012,85435388|2|04'/03'/2012,100244102|2|09'/09'/2012,100     245865|2|09'/09'/2012,100249440|2|09'/09'/2012,100251434|2|09'/09'/2012"}]'

我不明白我怎么能像我的模特说的那样,把这个回复放在列表中。

基本上,我想把每一行除以","添加到列表中。

我的代码如下:

    public class MatchHistoryParser
      {
       public RootObject get()
       {
        using (var webClient = new System.Net.WebClient())
        {
            string URL2 =       @"api url";
            var json = webClient.DownloadString(URL2);
            RootObject match = JsonConvert.DeserializeObject<RootObject>(json);
            return match;
        }
    }
}
public class RootObject
{
    public string account_id { get; set; }
    public string history { get; set; }
    public string win_loss_history { get; set; }
}

抛出错误:"附加信息:无法将当前JSON数组(例如[1,2,3])反序列化为类型"HoNEnemy.BL.RootObject",因为该类型需要JSON对象(例如{"name":"value"})才能正确反序列化。"

正在尝试解析RESTful api响应

你得到的是一个列表,而不是一个对象,所以你应该像这样解析

RootObject rootObject;
var matches = JsonConvert.DeserializeObject<IList<RootObject>>(json);

然后

if(matches.Any())
{
    rootObject = matches[0];
}

然后创建一个方法,将历史字符串拆分为一个列表,并使用该列表,而不是属性

使用JSON.Net来反序列化您的响应(本网站上提供了示例),然后在历史记录字段中使用Split()和ToList()。

如果不想使用外部lib,可以用JavaScriptSerializer替换JSON.Net。