如何将单个对象分配给列表?

时间:2017-01-25 00:07:06

标签: xamarin

我正在使用API​​ rest,它返回两种类型的json,object和array。

对象(当数据库中只有一条记录时):

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

数组(当数据库中有多个记录时):

{ "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;

但如果它是一个对象我不能,我得到以下错误:

  

无法将Object类型隐式转换为IEnumerable。

1 个答案:

答案 0 :(得分: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; }
}