Quiero enviar este Array con Ajax a api:
var receipt = Array(); receipt = [ { 'Service': 'Saab', 'Order': '20' }, { 'Service': 'Volvo', 'Order': '12' }, { 'Service': 'BMW', 'Order': '25' } ];Y este es mi cuerpo Ajax:
var r = JSON.stringify(receipt); $.ajax({ type: "POST", dataType: "Json", contentType: "application/json; charset=utf-8", data: r, url: "api/Receipt", success: function (result) { // To Do console.info(result); }, error: function (result) { console.info(result); } });Y esto es lo que obtengo como Json:
{[ { "Service": "Saab", "Order": "20" }, { "Service": "Volvo", "Order": "12" }, { "Service": "BMW", "Order": "25" } ]}Y los atrapo en el lado api Así:
[Route("api/Receipt")] [WebMethod] public string Receipt_Turn(object obj) { dynamic dyn = JsonConvert.DeserializeObject(obj.ToString()); if (dyn != null) { return dyn[1].ToString(); } else { return "false"; } } Y funciona, la parte return dyn[1].ToString() devuelve el segundo registro de mi Array. Pero quiero convertir esta variable dinámica en una lista o matriz de un modelo.
Aquí está mi modelo:
[Serializable()] public class Receipt { public string Service { get; set; } public string Order { get; set; } }Quiero actuar con él así:
string serv = receipt[1].Service;Cómo puedo hacerlo ?
Gracias...
Elimine la parte de matriz en su secuencia de comandos JS y escríbala así:
var receipt = [ { 'Service': 'Saab', 'Order': '20' }, { 'Service': 'Volvo', 'Order': '12' }, { 'Service': 'BMW', 'Order': '25' } ]; en esta forma estás enviando un Objeto. en su código, supongo que está enviando un JArray , por lo que generará algunos problemas al convertir de JArray a otro tipo.
en su lado API, edite su código como se muestra a continuación:
public string Receipt_Turn(object r) { //important Line Here List<Receipt> rr = JsonConvert.DeserializeObject<List<Receipt>>(r.ToString()); if (rr != null) { return rr[1].ToString(); } else { return "false"; } } como puede ver, lo obtenemos como un objeto y luego podremos preparar su parte DeserializeObject como mencioné.
la mayoría declara una lista de su modelo, y después de la parte DeserializeObject agrega el tipo al que desea convertirlo.
aquí Debido a que declaramos List<Receipt> , debemos convertir nuestro DeserializeObject a él, por lo que agregamos <List<Receipt>> después de DeserializeObject .
y finalmente puedes usarlo como quieras.
string serv = rr[1].Service;Suponiendo que está utilizando .NET Core, debería poder vincularlo automáticamente si hace algo como esto:
``` [Route("api/Receipt")] [WebMethod] public string Receipt_Turn(List<Receipt> receipts) { if (receipts != null) { return "seomthing"; } else { return "false"; } } ```