我正在开发一个Xamarin项目,我正在使用Firebase作为我的数据库。
我有一组数据如下:
我已设法通过RESTful服务检索数据。但是,当我尝试JsonConvert.Deserialize
时,我遇到一个错误,告诉我无法转换为.NET Collection
。
我有办法吗?
我的模特
public class TodoItem
{
public string ID { get; set; }
public string Name { get; set; }
public string Notes { get; set; }
public bool Done { get; set; }
}
从RESTful服务中检索
public async Task<List<TodoItem>> RefreshDataAsync()
{
Items = new List<TodoItem>();
//RestUrl = refer to constants.cs
var uri = new Uri(string.Format(Constants.RestUrl, string.Empty));
try
{
var response = await client.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
Items = JsonConvert.DeserializeObject<List<TodoItem>>(content);
}
}
catch (Exception ex)
{
Debug.WriteLine(@" ERROR{0}", ex.Message);
}
return Items;
}
UI
listView.ItemsSource = await App.TodoManager.GetTasksAsync();
更新
变量content
{\"-L9K-8AF9fxZfe6bwTjk\":{\"Done\":false,\"ID\":\"323642ac-89e2-4f14-b9b0-e9b7306aee81\",\"Name\":\"ufhd\",\"Notes\":\"nvnv\"},\"-L9K07oNjtvPQYbdyItU\":{\"Done\":false,\"ID\":\"c7a53ad2-533f-454c-9ac0-5b21c3d2669c\",\"Name\":\"abc\",\"Notes\":\"cde\"},\"-L9K1n1r7Q7ZIgA3KFaD\":{\"Done\":false,\"ID\":\"938bd62f-f117-4733-a1e4-a4ed22233ca3\",\"Name\":\"ffef\",\"Notes\":\"dfg\"}}
答案 0 :(得分:4)
正如您可以从第一个屏幕截图和json字符串中看到的那样 - 您收到的json实际上并不代表集合。它是一个具有神秘属性的对象,每个属性代表一个待办事项。
所以你需要将它反序列化为字典:
JsonConvert.DeserializeObject<Dictionary<string, TodoItem>>(content);
如果您不关心那些神秘的属性名称,您可以这样做:
Items = JsonConvert.DeserializeObject<Dictionary<string, TodoItem>>(content).Values.ToList()
答案 1 :(得分:1)
这更像是Evk's answer的补充。
为了简洁起见,我冒昧地缩小了您的示例数据集。这个小例子我已经验证了它的功能。
class Program
{
static void Main(string[] args)
{
var JSONStr = "{\"user\":{\"L9k0\":{\"ID\":\"001\", \"name\":\"somename\"},\"L9k1\":{\"ID\":\"002\", \"name\":\"someothername\"}}}";
var res = JsonConvert.DeserializeObject<JsonResult>(JSONStr);
Console.ReadLine();
}
}
class JsonResult {
public Dictionary<string, ToDoItem> user { get; set; }
}
class ToDoItem {
public string ID { get; set; }
public string name { get; set; }
}