我现在正在研究Xamarin项目,并且正在使用Firebase作为数据库。

我有一组数据,如下所示:

c# - 将JSON反序列化为可读格式-LMLPHP

我已经设法通过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;
}


用户界面

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\"}}

最佳答案

从第一个屏幕截图和json字符串都可以看到,您收到的json实际上并不表示集合。这是一个具有神秘属性的对象,每个属性代表一个待办事项。

因此,您需要将其反序列化为字典:

JsonConvert.DeserializeObject<Dictionary<string, TodoItem>>(content);


如果您不关心那些神秘的属性名称,则可以执行以下操作:

Items = JsonConvert.DeserializeObject<Dictionary<string, TodoItem>>(content).Values.ToList()

10-04 12:06