无法将Newtonsoft.Json.Linq.JArray转换为Newtonsoft.Json.Linq.JToken.当我通过json时出错

Sin*_*dra 9 c# json json.net

我需要将检查过的复选框代码传递给JavaScript中的C#.我能够通过JSON发送代码.我的JSON值是JArray.我在标题中得到了例外.

JSON:

{
  "Items": [
    "100066",
    "100067"
  ]
}
Run Code Online (Sandbox Code Playgroud)

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" });
}
Run Code Online (Sandbox Code Playgroud)

客户端:

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"
    });
}
Run Code Online (Sandbox Code Playgroud)

请帮我修复此错误.

Chr*_*tle 15

在这种情况下,我认为不JsonConvert.DeserializeObject适合使用.转换JArrayJToken可能发生的错误是因为DeserializeObject尝试直接反序列化JObject,这将失败,因为它将无法找到所需的字段JObject.

尝试使用JObject.Parse(json)获取dynamic对象.之后您可以像这样使用它:

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
}
Run Code Online (Sandbox Code Playgroud)


Sha*_*arK 13

它可以从JArray转换为List as array.ToObject<List<TargetDataType>>();

  • 这确实节省了我的时间。谢谢哥们。 (3认同)
  • 这正是我要找的 (2认同)