当我在 Xamarin 中使用 Task<ObservableCollection<class>> 时,每当我使用 Json Deserializer 转换它时它都会给我错误

When I use Task<ObservableCollection<class>> in Xamarin, it gives me error whenever I convert it using Json Deserializer

每当在 Xamarin 中导航页面并且我使用 Prism 作为框架时,我都会收到一个 API 调用。这是我的代码

 public override async void OnNavigatedTo(NavigationParameters parameters)
    {
        base.OnNavigatedTo(parameters);

        ObservableCollection<GetStudyDto> result = await GetStudyDetail(2);
        if (result != null)
        {
            Debug.WriteLine(result);
        }
    }
protected async Task<ObservableCollection<GetStudyDto>> GetStudyDetail(int studyId)
    {
            StudyDetail = await apiService.GetStudyById<ObservableCollection<GetStudyDto>>($"/Study/", studyId);
        return StudyDetail;
    }

每当我使用 ObservableColletion 来绑定我的 class 时,它都会给我错误。

Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.ObjectModel.ObservableCollection`1[CRCRevamp.Mobile.Models.Dto.GetStudyDto]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly. To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List) that can be deserialized...

但是每当我没有将我的 class 绑定到 ObservableCollection 时,它工作得很好。

这是我的示例 JSON 来自 API 的响应:

[JSON 来自 API] 的对象

看起来 JSON 没有正确发布,但我怀疑问题是 JSON 的结构是对象而不是数组。 ObservableCollection 仅在 JSON 对应于数组时有效。

为了绕过(大概)结构不佳的 JSON,您可以使用 Dictionary<string, MyClass> 然后调用 AsEnumerable 创建一个 IEnumerable 然后将其转换为一个 ObservableCollection.

var dict = JsonConvert.DeSerialize<Dictionary<string, MyClass>>(jsonString);
var collection = new ObservableCollection(dict.AsEnumerable());