我正在使用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。
答案 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; }
}