Sinthuja.Chandra Sinthuja.Chandra - 4 months ago 80x
JSON Question

Cannot cast Newtonsoft.Json.Linq.JArray to Newtonsoft.Json.Linq.JToken. Error getting when I pass the json

I need to pass the checked check-boxes code to C# from JavaScript. I was able to send the code via JSON. And my JSON value comes as a JArray. And I am getting the exception in the title.


"Items": [


public ActionResult UpdateTransportRequests()
string json;
using (var reader = new StreamReader(Request.InputStream))
json = reader.ReadToEnd();

JObject jo = (JObject)JsonConvert.DeserializeObject(json);

string lineItems = jo.Value<string>("Items");

RequestDataAccess rda = new RequestDataAccess();
decimal reqId = decimal.Parse(lineItems);
rda.ApproveReject_Request(reqId, "A", "");

return Json(new { result = "success" });

Client Side:

function approveAll(requestid) {
var items = [];

$('#grid tbody').find('input:checkbox:checked').each(function (index, item) {
var rowIndex = $(this).closest('tr').index();
items.push($('#grid tbody').find('tr:eq(' + rowIndex + ')').find('td:eq(1)').text().replace('TR-', ''));

type: "POST",
url: '@Url.Action("UpdateTransportRequestsAll", "TransportRequest")',
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ "Items": items }),
success: function (response) {
dataType: "json"

Please help me to fix this error.


In this situation, I don't think JsonConvert.DeserializeObject is the appropriate method to use. The error about converting from JArray to JToken likely occurs because DeserializeObject is attempting to directly deserialize to JObject, which will fail because it won't find the required fields on JObject.

Try using JObject.Parse(json) to get a dynamic object. You can use it like this afterwards:

dynamic jo = JObject.Parse(json);
var items = jo.Items;
foreach(var item in items)
    string lineItem = (string) item;
    decimal reqId = decimal.Parse(lineItem);

    // Use as required