Как заполнить массив JSON в ASP:repeater
Я застрял с портированием и форматированием массива JSON в ASP:Repeater
Массив JSON:
{"root":[{"prog_id":"P1000004","prog_name":"Course1","prog_banner":"","isClientActive":"","courses":[{"course_id":"C1000012","course_name":"Course1-1","course_description":"","course_thumbnail":""},{"course_id":"C1000013","course_name":"Course1-2","course_description":"","course_thumbnail":""}]},{"prog_id":"P1000010","prog_name":"Course2","prog_banner":"1000010.jpg","isClientActive":"active","courses":[{"course_id":"C1000007","course_name":"Course2-1","course_description":"","course_thumbnail":""},{"course_id":"C1000008","course_name":"Course2-2","course_description":"","course_thumbnail":""},{"course_id":"C1000009","course_name":"Course2-3","course_description":"","course_thumbnail":""},{"course_id":"C1000010","course_name":"Course2-4","course_description":"","course_thumbnail":""},{"course_id":"C1000011","course_name":"Course2-5","course_description":"","course_thumbnail":""}]}]}
ток на выходе:
P1000004: Course1 Canorous_Academy.test.Cours[] P1000010: Course2 Canorous_Academy.test.Cours[]
Желаемый результат (должен выглядеть так):
Repeater-Item 1 P1000004: Course1 Courses: Course1-1 Course1-2 Repeater-Item 2 P1000010: Course2 Courses: Course2-1 Course2-2 Course2-3 Course2-4 Course2-5
Что я уже пробовал:
код ASP
<asp:Repeater ID="Repeater1" runat="server"> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "prog_id") %>">:<%# DataBinder.Eval(Container.DataItem, "prog_name") %> <ul> <li><%# DataBinder.Eval(Container.DataItem, "courses") %></li> </ul> </ItemTemplate> </asp:Repeater>
Код C#
protected void Page_Load(object sender, EventArgs e) { string json="{\"root\":[{\"prog_id\":\"P1000004\",\"prog_name\":\"Course1\",\"prog_banner\":\"\",\"isClientActive\":\"\",\"courses\":[{\"course_id\":\"C1000012\",\"course_name\":\"Course1-1\",\"course_description\":\"\",\"course_thumbnail\":\"\"},{\"course_id\":\"C1000013\",\"course_name\":\"Course1-2\",\"course_description\":\"\",\"course_thumbnail\":\"\"}]},{\"prog_id\":\"P1000010\",\"prog_name\":\"Course2\",\"prog_banner\":\"1000010.jpg\",\"isClientActive\":\"active\",\"courses\":[{\"course_id\":\"C1000007\",\"course_name\":\"Course2-1\",\"course_description\":\"\",\"course_thumbnail\":\"\"},{\"course_id\":\"C1000008\",\"course_name\":\"Course2-2\",\"course_description\":\"\",\"course_thumbnail\":\"\"},{\"course_id\":\"C1000009\",\"course_name\":\"Course2-3\",\"course_description\":\"\",\"course_thumbnail\":\"\"},{\"course_id\":\"C1000010\",\"course_name\":\"Course2-4\",\"course_description\":\"\",\"course_thumbnail\":\"\"},{\"course_id\":\"C1000011\",\"course_name\":\"Course2-5\",\"course_description\":\"\",\"course_thumbnail\":\"\"}]}]}"; Rootobject _objRoot = JsonConvert.DeserializeObject<Rootobject>(json); GetDataTableFromObjects(_objRoot.root); Repeater1.DataSource = GetDataTableFromObjects(_objRoot.root); Repeater1.DataBind(); } public static DataTable GetDataTableFromObjects(object[] objects) { if (objects != null && objects.Length > 0) { Type t = objects[0].GetType(); DataTable dt = new DataTable(t.Name); foreach (PropertyInfo pi in t.GetProperties()) { dt.Columns.Add(new DataColumn(pi.Name)); } foreach (var o in objects) { DataRow dr = dt.NewRow(); foreach (DataColumn dc in dt.Columns) { dr[dc.ColumnName] = o.GetType().GetProperty(dc.ColumnName).GetValue(o, null); } dt.Rows.Add(dr); } return dt; } return null; } } public class Rootobject { public Root[] root { get; set; } } public class Root { public string prog_id { get; set; } public string prog_name { get; set; } public string prog_banner { get; set; } public string isClientActive { get; set; } public Cours[] courses { get; set; } } public class Cours { public string course_id { get; set; } public string course_name { get; set; } public string course_description { get; set; } public string course_thumbnail { get; set; } }
MadMyche
В вашем вопросе отсутствует важная деталь: откуда берется JSON? Это AJAX-запрос? Или это исходит от запроса, сделанного на стороне сервера? Или это содержимое из файла?
Я бы посоветовал вам использовать Improve Question
виджет выше, чтобы добавить это в исходный вопрос.
Member 8107173
Спасибо, Мадмыч, за ответ. Я обновил код и вопрос. Пожалуйста, пройдите через него и посмотрите, сможете ли вы помочь мне с этим. Я ценю вашу помощь.
MadMyche
всегда пожалуйста.
Это больше для пользы других, чтобы помочь вам; так как я не работаю с классом ретранслятора.
Когда вы отлаживаете это, правильно ли заполняются ваши классы при де-сериализации?
Member 8107173
да, он де-сериализуется, как и ожидалось. Я застрял только на уровне ретранслятора, где я не могу заполнить данные дочернего массива <%# DataBinder.Eval(Container.DataItem, "курсы") %>