2014-10-08 76 views
0

我有一个问题,我似乎无法找到关于如何解决它的谷歌线索。我试图解析一个RESTful-api服务的响应。试图解析一个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”})才能正确反序列化。“

+1

你需要一个像JSON.NET http://james.newtonking.com/json或Microsoft内置的JSON解析器。或者从JSON中生成C#,以了解JSON是什么:http://json2csharp.com/ – MatthewMartin 2014-10-08 14:38:06

+0

该字符串的内容对JavaScript不透明。一旦你在一个字符串中,这是一个特别的格式。 (这意味着历史) – MatthewMartin 2014-10-08 14:39:32

+0

历史应该是一个字符串。 public class RootObject { public string account_id {get;组; } public string history {get;组; } } – MatthewMartin 2014-10-08 14:40:12

回答

1

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

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

然后

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

,然后创建一个方法,以历史字符串分割成一个列表,并使用那不是财产

2

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

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

+0

这是我的代码: - 公共匹配的get(){ 使用 (VAR的WebClient =新System.Net.WebClient()){ 串URL2 = @ “我的API URL”; var json = webClient.DownloadString(URL2); 匹配匹配= JsonConvert.DeserializeObject (json); 返回匹配; } } 这会抛出一个关于响应格式的错误 – user3581054 2014-10-08 15:09:13

+0

那是因为您的历史属性应该是一个字符串而不是字符串列表......您发布的JSON不是字符串数组。 – BenjaminPaul 2014-10-08 15:21:22

+0

我明白了,看看我上面的修改 – user3581054 2014-10-08 15:25:39