Estoy desarrollando una aplicación web central asp.net. Estoy enviando datos desde una página de afeitar al script getJson para mostrar un gráfico en la página. Cuando envío una serie de clases anónimas, getJson recibe datos. Cuando envío una matriz de clases personalizadas, getJson recibe una matriz de objetos vacíos que no tienen propiedades.
Recibido bien:
var anonymousarray = new[] { new {name = "first", value = 3 }, new {name = "second", value = 6 }, new {name = "third", value = 1 }, };Recibido como una matriz de objetos vacíos:
Test[] testarray = new [] { new Test {name = "first", value = 3}, new Test {name = "second", value = 6}, new Test {name = "third", value = 1} };Clase de prueba:
public class Test { public int value; public string name; }Manejador en la página de Razor:
public JsonResult OnGetData() { Test[] testarray= new[] { new Test {name = "first", value = 3}, new Test {name = "second", value = 6}, new Test {name = "third", value = 1} }; return new JsonResult(testarray); }Guión de la página de afeitar:
@section scripts{ @{await Html.RenderPartialAsync("_ValidationScriptsPartial");} <script> var ctx = document.getElementById('barChart').getContext('2d'); $(function () { $.getJSON(`?handler=Data`, (data) => { var labels = []; var dataresults = []; $.each(data, function (index, item) { labels.push(item.name); dataresults.push(item.value); }); console.log(labels) console.log(dataresults) var myChart = new Chart(ctx, { type: 'bar', data: { labels: labels, datasets: [{ label: 'Results', data: dataresults, borderWidth: 1 }] }, options: { scales: { y: { beginAtZero: true } } } }); }); }); </script> }Ayúdenme a enviar una matriz/lista de mis clases personalizadas al script getJson. Pasé muchas horas leyendo artículos y publicaciones pero no pude encontrar una solución.
Cuando envío una serie de clases anónimas, getJson recibe datos. Cuando envío una matriz de clases personalizadas, getJson recibe una matriz de objetos vacíos que no tienen propiedades.
Intente modificar su clase de Test para definir el value y el name como propiedad con el accesor get y set , como se muestra a continuación.
public class Test { public int value {get;set;}; public string name {get;set;}; }De este documento sobre "Comportamiento de serialización" , puede encontrar:
- Los campos se ignoran.