У меня есть следующий JSON-url. Я пытаюсь заполнить свой список, используя подмассивные волосы [] и математику [] после получения их из URL JSON.Отображение списка посещений с использованием подмассива JSON
Вот гиперссылка http://pastebin.com/raw.php?i=2fzqLYXj
Внутри массива «Студенты» есть подмассив называется «Свойство», а другой к югу от массива внутри «Свойства» под названием «Оценка». «волосы» находятся внутри «Свойства», а «математика» находится внутри «Града».
Вот мой WebService класс
public class WebService
{
public WebService()
{
}
public async Task<Rootobject> GetStudentInfoAsync (string apiurl) {
var client = new HttpClient();
var response = await client.GetStringAsync(string.Format(apiurl));
return JsonConvert.DeserializeObject<Rootobject>(response.ToString());
}
}
А вот мой вид Модель
public class Property
{
public int iq { get; set; }
public string hair { get; set; }
public string glasses { get; set; }
public Grade[] Grades { get; set; }
}
public class StudentInfo
{
public string name { get; set; }
public string lastname { get; set; }
public Property[] Properties { get; set; }
public string StudentName {
get{ return String.Format ("{0}", name); }
}
//I am accessing the JSON sub arrays with the following to get the "hair" and "math" properties.
public string[] HairColors
{
get
{
return (Properties ?? Enumerable.Empty<Property>()).Select(p => p.hair).ToArray();
}
}
public string[] MathGrades
{
get
{
return (Properties ?? Enumerable.Empty<Property>()).SelectMany(p => p.Grades ?? Enumerable.Empty<Grade>()).Select(g => g.Math).ToArray();
}
}
}
public class Rootobject
{
public StudentInfo[] students { get; set; }
}
}
А вот как я заполнить мой список представления с именами студентов, который работает. Заметьте, что «StudentName» не было в подмассиве.
var sv = new WebService();
var es = await sv.GetStudentInfoAsync(apiurl);
Xamarin.Forms.Device.BeginInvokeOnMainThread(() => {
listView.ItemsSource = es.students;
});
var cell = new DataTemplate (typeof(TextCell));
listView.ItemTemplate = cell;
listView.ItemTemplate.SetBinding(TextCell.TextProperty, "StudentName");
Но мне нужно, чтобы заполнить свой список вид с HairColors и MathGrades следующим образом, но следующий код не работает.
var sv = new WebService();
var es = await sv.GetStudentInfoAsync(apiurl);
Xamarin.Forms.Device.BeginInvokeOnMainThread(() => {
listView.ItemsSource = es.students;
});
var cell = new DataTemplate (typeof(TextCell));
listView.ItemTemplate = cell;
listView.ItemTemplate.SetBinding(TextCell.TextProperty, "HairColors");
listView.ItemTemplate.SetBinding (TextCell.DetailProperty, "MathGrades");
Что не этот код работает? Как мне заставить работать?
Что именно вы имеете в виду «не работает»? –
То, что я имею в виду, это то, что список не заполнен ничем, и я не получаю никаких ошибок. – Carell
Вы пытались вернуть одну строку вместо массива? HairColors - это массив, что именно должно отображаться в ячейке? Первый элемент? Все элементы? –