我有一个问题,我似乎无法在谷歌上找到任何关于如何解决它的线索。我试图解析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"}]'
我不明白如何将这个回复放到List中,就像我的模型所说的那样。
基本上,我希望每一行除以“,”添加到列表中。
我的代码如下所示:
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”})才能正确反序列化。“
答案 0 :(得分:2)
使用JSON.Net反序列化您的回复(示例provided on this website),然后在历史记录字段中使用Split()和ToList()。
如果您不想使用外部lib,可以用JavaScriptSerializer替换JSON.Net。
答案 1 :(得分:1)
你得到一个列表,而不是一个对象,所以你应该像这样解析
RootObject rootObject;
var matches = JsonConvert.DeserializeObject<IList<RootObject>>(json);
然后
if(matches.Any())
{
rootObject = matches[0];
}
然后创建一个方法将历史字符串拆分为一个列表并使用它,而不是属性