2017-09-02 17 views
-1

JSON文字列(複数のオブジェクトを含む)をリストに逆シリアル化しようとすると、わからない問題が発生しました。ここにJSONがあります。リストに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パラメータで単一のオブジェクトを指定しています。 RaceListの代わりにList<RaceModel>を使用してください:

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

ありがとう、それはトリックでした! –

関連する問題