从列表中的子列表按索引获取项目

问题描述 投票:-1回答:1

在我的实际项目中,我实际上是用API检索数据,并使用一个原始体,返回结果是JSON格式。我试着给我的代码举一个类似的例子,如下所示...

我想实现的是让用户在下拉列表中进行选择(Xamarin Forms中的Picker),然后显示相应的结果...... 也就是说,下拉列表中会有John和Mark。如果用户选择了John,就会显示密码:1234,角色。管理员...... 我不知道如何实现这个功能,因为JSON结果是一整块的,类似于我的例子中的 var exmp....

我的代码

 var exmp = "User: John, Password: 1234, Role: Admin, User: Mark, Password: 0000, Role: User";
        string[] empTxt = exmp.Split(new[] { ',', ':' }, StringSplitOptions.RemoveEmptyEntries);
        var user = new List<string>();
        var userdetails = new List<string>();
        for (int i = 0; i < empTxt.Count(); i++)
        {
            if (empTxt[i].Equals("User"))
            {

                user.Add(empTxt[i + 1]);
                user.Add(empTxt[i + 3]);
                user.Add(empTxt[i + 5]);
                userdetails.AddRange(user);
            }

        }
        for (int i = 0; i < userdetails.Count(); i++)
        {
            //labelTxt.Text = userdetails.ToString();
              Picker.ItemsSource = userdetails[0]; (can't run code because error)
        }

Json正文

{
        {
            "User": "John",
            "Password": "1234",
            "Role": "Admin",
        },
        {
            "User": "Mark",
            "Password": "0000",
            "Role": "Director",
        }

}

c# list
1个回答
1
投票

考虑到你有以下有效的JSON作为你的输入,那么这一切都变得相当琐碎。

[
  {
    "User":"John","Password":"1234","Role":"Admin"
  },
  {
    "User":"Mark","Password":"0000","Role":"User"
  }
]

首先定义一个类,它将捕获你的用户数据。

public class UserRecord
{
    public string User;
    public string Password;
    public string Role;
    public override string ToString() => this.User;
}

现在,使用 Newtonsoft.Json,我可以这样反序列化数据。

UserRecord[] users = JsonConvert.DeserializeObject<UserRecord[]>(json);

最后,绑定是超级简单的。

Picker.ItemsSource = users;

覆盖 ToString() 将决定下拉菜单中显示哪些数据。当用户在下拉菜单中选择一个项目时,您应该能够将所选项目投向 UserRecord 来获取其余的字段。

让我知道,如果工作。

© www.soinside.com 2019 - 2024. All rights reserved.