【问题标题】:Trying to parse a RESTful api response尝试解析 RESTful api 响应
【发布时间】:2014-10-08 14:34:19
【问题描述】:

我有一个问题,我似乎无法在谷歌上找到任何关于如何解决它的线索。我正在尝试解析 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"})才能正确反序列化。”

【问题讨论】:

  • 您需要一个 JSON 解析器,例如 JSON.NET james.newtonking.com/json 或 Microsoft 内置的解析器。或者从 JSON 生成 C# 以了解 JSON 是什么:json2csharp.com
  • 该字符串的内容对 JavaScript 是不透明的。一旦你在一个字符串中,它就是一种临时格式。 (也就是说历史)
  • 历史记录应该是一个字符串。公共类 RootObject { 公共字符串 account_id { 获取;放; } 公共字符串历史 { 获取;放; } }
  • 如果我想遍历历史怎么办?
  • myObject.History.Split(" ").ToList();或者更有可能的是,在您那里的不同分隔符上进行大约 5 次拆分。

标签: c# .net json api


【解决方案1】:

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

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

然后

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

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

【讨论】:

    【解决方案2】:

    使用 JSON.Net 反序列化您的响应(示例 provided on this website),然后在您的 History 字段上使用 Split() 和 ToList()。

    如果您不想使用外部库,可以将 JSON.Net 替换为 JavaScriptSerializer。

    【讨论】:

    • 这是我的代码: - public Match get() { using (var webClient = new System.Net.WebClient()) { string URL2 = @"my api url"; var json = webClient.DownloadString(URL2);匹配匹配 = JsonConvert.DeserializeObject(json);返回匹配; } } 这会引发关于响应格式的错误
    • 那是因为你的历史属性应该是一个字符串而不是一个字符串列表......你发布的 JSON 不是一个字符串数组。
    猜你喜欢
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2020-03-19
    • 2018-11-22
    • 2016-05-05
    • 2011-11-08
    • 2019-02-08
    • 1970-01-01
    相关资源
    最近更新 更多