当我使用Task<;可观察收集<;类别>&燃气轮机;在Xamarin中,每当我使用Json反序列化程序转换它时,它都会给我错误
每当在Xamarin中导航页面时,我都会调用一个API,我使用Prism作为框架。这是我的密码当我使用Task<;可观察收集<;类别>&燃气轮机;在Xamarin中,每当我使用Json反序列化程序转换它时,它都会给我错误,xamarin,observablecollection,xamarin.uwp,Xamarin,Observablecollection,Xamarin.uwp,每当在Xamarin中导航页面时,我都会调用一个API,我使用Prism作为框架。这是我的密码 public override async void OnNavigatedTo(NavigationParameters parameters) { base.OnNavigatedTo(parameters); ObservableCollection<GetStudyDto> result = await GetStudyDetail(2)
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;
}
public覆盖异步void OnNavigatedTo(NavigationParameters)
{
base.OnNavigatedTo(参数);
ObservableCollection结果=等待GetStudyDetail(2);
如果(结果!=null)
{
Debug.WriteLine(结果);
}
}
受保护的异步任务GetStudyDetail(int studyId)
{
studydeail=wait apiService.GetStudyById($“/Study/”,studyId);
返回研究详细信息;
}
每当我使用ObservableCollection绑定我的类时,它都会给我错误
无法将当前JSON对象(例如{“名称”:“值”})反序列化为类型“System.Collections.ObjectModel.ObservableCollection`1[CRCRevamp.Mobile.Models.Dto.GetStudyTo]”,因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。
要修复此错误,请将JSON更改为JSON数组(例如[1,2,3]),或更改反序列化类型,使其成为可以反序列化的正常.NET类型(例如,不是integer之类的基元类型,也不是数组或列表之类的集合类型)
但是,每当我没有将我的类绑定到可观察的集合时,它就会工作得非常好
下面是来自API的JSON响应示例:
[JSON Object from API]看起来JSON没有正确发布,但我怀疑问题在于JSON的结构是对象而不是数组
ObservableCollection
仅当JSON对应于数组时才起作用
为了避免(可能是)结构不良的JSON,您可以使用字典
,然后调用AsEnumerable
创建IEnumerable
,然后将其转换为ObservableCollection
var dict = JsonConvert.DeSerialize<Dictionary<string, MyClass>>(jsonString);
var collection = new ObservableCollection(dict.AsEnumerable());
var dict=JsonConvert.DeSerialize(jsonString);
var集合=新的ObservableCollection(dict.AsEnumerable());