首页 > 解决方案 > 如何以 xamarin 形式反序列化视图模型中的对象

问题描述

我有这样的模型类,我想从视图模型中的 Listview 中线程用户数据。

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;但它没有填充到列表中。

标签: formsxamarin

解决方案


我根据几个假设来回答这个问题:

  • 您的变量list是类型的公共属性ObservableCollection<threadUsers>
  • list已经实例化
  • 您已绑定list到一个类似于以下内容的 ListView:<ListView ItemsSource="{Binding list}">

有了这两个假设,您应该能够按如下方式更改代码。

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

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

由于list是一个ObservableCollection,它会自动通知ListView它绑定的一个,它已经更新。


推荐阅读