2017-09-02 146 views
-1

我遇到了一個問題,我不明白當試圖反序列化一個JSON字符串(包含多個對象)到一個列表。這是JSON。C#反序列化JSON到列表

[ 
    { 
     "id":2, 
     "name":"Race 1", 
     "raceDateTime":"2017-09-02T14:27:39.654", 
     "raceStartTime":"2017-09-02T14:27:39.654", 
     "description":"string", 
     "maxEntries":0, 
     "currentEntries":0, 
     "status":0 
    }, 
    { 
     "id":3, 
     "name":"Race 2", 
     "raceDateTime":"2017-09-02T14:27:39.654", 
     "raceStartTime":"2017-09-02T14:27:39.654", 
     "description":"string", 
     "maxEntries":0, 
     "currentEntries":0, 
     "status":0 
    }, 
    { 
     "id":4, 
     "name":"Race 3", 
     "raceDateTime":"2017-09-02T14:27:39.654", 
     "raceStartTime":"2017-09-02T14:27:39.654", 
     "description":"string", 
     "maxEntries":0, 
     "currentEntries":0, 
     "status":0 
    }, 
    { 
     "id":5, 
     "name":"Race 4", 
     "raceDateTime":"2017-09-02T14:27:39.654", 
     "raceStartTime":"2017-09-02T14:27:39.654", 
     "description":"string", 
     "maxEntries":0, 
     "currentEntries":0, 
     "status":0 
    } 
] 

然後我有與我的模型匹配的JSON參數。

public class RaceModel 
{ 

    public int id { get; set; } 
    public string name { get; set; } 
    public DateTime raceDateTime { get; set; } 
    public DateTime raceStartTime { get; set; } 
    public string description { get; set; } 
    public int maxEntries { get; set; } 
    public int currentEntries { get; set; } 
    public int status { get; set; } 

} 

public class RaceList 
{ 
    public List<RaceList> racelist { get; set; } 
} 

而我的代碼從REST API請求獲得JSON低於:

string APIServer = Application.Current.Properties["APIServer"].ToString(); 
string Token = Application.Current.Properties["Token"].ToString(); 
var client = new RestClient(APIServer); 
var request = new RestRequest("api/race", Method.GET); 
request.AddHeader("Content-type", "application/json"); 
request.AddHeader("Authorization", "Bearer " + Token); 
var response = client.Execute(request) as RestResponse; 

var raceobject = JsonConvert.DeserializeObject<RaceList>(response.Content); 

但我得到這個錯誤(使用Newtonsoft.JSON)

Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'TechsportiseApp.API.Models.RaceList' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly. 
To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array. 
Path '', line 1, position 1. 

我會喜歡有一個列表/我可以迭代和處理的對象集合。

任何人都可以建議我做錯了什麼?

+2

你應該在你的RaceList類中使用RaceModel嗎? – Javad

+0

是的,趕上,謝謝! –

回答

2

你的響應是一個對象數組,你在T參數中指定一個單獨的對象。使用List<RaceModel>而不是RaceList

var raceobject = JsonConvert.DeserializeObject<List<RaceModel>>(response.Content); 
+0

謝謝,這個伎倆! –