2017-01-25 3 views
0

Я работаю с API-интерфейсом, и он возвращает мне два типа json, object и array.Как назначить один объект списку?

Object (Когда есть только одна запись в базе данных):

{ "complain": { "id": "1" , "description": "hello", "date": "2017-01-24 11:46:22", "Lat": "20.5204446", "Long": "-100.8249097" } } 

Array (При наличии более чем одна запись в базе данных):

{ "complain": [ { "id": "1" , "description": "hello", "date": "2017-01-24 11:46:22", "Lat": "20.587446", "Long": "-100.8246490" }, { "id": "2" , "description": "hello 2", "date": "2017-01-24 11:50:12", "Lat": "20.529876", "Long": "-100.8249097" } ] } 

код я использую потреблять JSON выглядит следующим образом:

content = await response.Content.ReadAsStringAsync(); 

var token = JToken.Parse(content); 

       if (token["complain"] is JArray) 
       { 
        var jsonArray = JsonConvert.DeserializeObject<RootArray>(content); 
       } 
       else if (token["complain"] is JObject) 
       { 
        var jsonObject = JsonConvert.DeserializeObject<RootObject>(content); 
       } 

Когда дело доходит до массива JSON, если я могу добавить его в ListView:

myList.ItemsSource = jsonArray.listArray; 

Но если это объект, который я не могу, и я получаю следующее сообщение об ошибке:

Cannot implicitly convert type Object to IEnumerable.

+0

То есть, потому что 'list' в этот момент является' RootObject', добавить этот объект в список/массива/коллекции, а затем присвоить что collection to your 'ItemSource' – SushiHangover

+1

У вас есть контроль над api? Если вы это сделаете, я бы рекомендовал вам не возвращать 2 разных объекта из одной и той же конечной точки. Он всегда должен возвращать массив, даже если в базе данных есть только одна запись. Это должно помешать вам выполнить эти проверки. –

+0

Ваше сообщение - это наблюдение. Что за вопрос? :-) Как назначить один объект списку? Как изменить Json, чтобы заставить его работать? Как изменить API RESTful, чтобы вернуть что-то другое? Или просто: почему он не работает? – Krumelur

ответ

0

Наконец-то я смог решить мою ошибку, это просто вопрос создания списка и добавления десериализованный json-объект.

var jsonObject = JsonConvert.DeserializeObject<RootObject>(content); 
List<Complain> simpleList = new List<Complain>(); 
simpleList.Add(jsonObject.ComplainObject); 
myList.ItemsSource = simpleList; 

Класс десериализации объект JSON:

public class RootObject 
{ 
    [JsonProperty("complain")] 
    public Complain ComplainObject { get; set; } 
} 
Смежные вопросы