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

时间:2020-05-12 02:02:02

标签: c# list

在我的实际项目中,我实际上是使用带有原始正文的API来检索数据,并且返回结果是JSON。我试图给下面的代码提供类似的示例...

我要实现的是允许用户在下拉列表中进行选择(Xamarin Forms中的“ Picker”),然后显示相应的结果...意思是,下拉列表中将包含John和Mark。如果用户选择John,它将显示密码:1234,角色:Admin .....我不确定如何实现此目标,因为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)
        }

杰森的身体

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

}

1 个答案:

答案 0 :(得分: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即可获得其余字段。

让我知道是否可行。