在我的实际项目中,我实际上是使用带有原始正文的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",
}
}
答案 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
即可获得其余字段。
让我知道是否可行。