如何以Xamarin形式在视图模型中DeserializeObject

时间:2019-09-18 06:08:52

标签: forms xamarin

我想从中获得像这样的模型类,这样ViewView的Listview中的threadUsers数据就会出现。

public  class DealMessageThreadList
{
    public List<DealMessageThread> messages { get; set; }
    public List<threadUsers> threadUsers { get; set; }
}

public class DealMessageThread
{
    public string author { get; set; }
    public string authorId { get; set; }
    public DateTime createdDate { get; set; }
    public string plainContent { get; set; }
    public string threadId { get; set; }
}

public partial class threadUsers
{
    public string name { get; set; }
    public string userid_10 { get; set; }
}

public partial class threadUsers
{
    public static ObservableCollection<threadUsers> FromJson(string json) => JsonConvert.DeserializeObject<ObservableCollection<threadUsers>>(json);
}

现在我想在视图模型中反序列化线程用户,以下是ViewModel中的方法。现在我想在视图模型中反序列化线程用户,以下是ViewModel中的方法。

public async Task FetchThreadUserData()
{
    using (HttpClient hc = new HttpClient())
    {
        try
        {
            IsBusy = true;
            var jsonString = await hc.GetStringAsync(url);
            var obj = JsonConvert.DeserializeObject<DealMessageThreadList>(jsonString);
            //IEnumerable<threadUsers> lstThreadUsers;
            lstThreadUsers = obj.threadUsers.Select(t => new threadUsers()
            {
                userid_10 = t.userid_10,
                name = t.name
            });
            //here list is itemsourse of listview 
            list = lstThreadUsers;
        }
        finally
        {
            IsBusy = false;
        }
    }
}

如何获取数据并填充到列表视图?我想在Listview中填充threadUsers数据。我创建了IEnumerable<threadUsers> lstThreadUsers;,但没有在列表中填充。

1 个答案:

答案 0 :(得分:1)

我是基于两个假设来回答这个问题的:

  • 您的变量list是类型ObservableCollection<threadUsers>的公共属性
  • list已被实例化
  • 您已将list绑定到一个类似<ListView ItemsSource="{Binding list}">的ListView上

基于这两个假设,您应该可以简单地按如下方式更改代码。

反序列化对象后,不要制作新的IEnumerable<treadUsers>并将对象复制threadUsers,而是将它们复制到ObservableCollection中:

foreach(var user in obj.threadUsers)
    list.Add(user);

由于listObservableCollection,它将自动通知它绑定到的ListView,它已经更新。