web-dev-qa-db-fra.com

Impossible de convertir Newtonsoft.Json.Linq.JArray en Newtonsoft.Json.Linq.JToken. Erreur lors du passage du json

Je dois passer le code des cases à cocher cochée à C # à partir de JavaScript. J'ai pu envoyer le code via JSON. Et ma valeur JSON vient en tant que JArray. Et je reçois l'exception dans le titre.

JSON:

{
  "Items": [
    "100066",
    "100067"
  ]
}

C #:

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" });
}

Côté client:

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-', ''));

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

S'il vous plaît, aidez-moi à corriger cette erreur.

6
Sinthuja.Chandra

Dans cette situation, je ne pense pas que JsonConvert.DeserializeObject soit la méthode appropriée à utiliser. L'erreur concernant la conversion de JArray en JToken est probable car DeserializeObject tente de désérialiser directement en JObject, ce qui échouera car il ne trouvera pas les champs obligatoires sur JObject.

Essayez d’utiliser JObject.Parse(json) pour obtenir un objet dynamic. Vous pouvez l'utiliser comme ça après:

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
}
14
Chris Mantle

Il peut être converti de JArray à List sous la forme array.ToObject<List<TargetDataType>>(); 

8
SharK
public ActionResult UpdateTransportRequests() 
{
    string json;

    using (var reader = new StreamReader(Request.InputStream))
    {
        json = reader.ReadToEnd();
    }

    dynamic jo = JObject.Parse(json);
    foreach (var item in jo.Items)
    {
        decimal reqId = (decimal)item;
        RequestDataAccess rda = new RequestDataAccess();
        rda.AllApproveReject_Request(reqId, "A", "");
    }
    return Json(new { result = "success" });
}
1
Sinthuja.Chandra