我需要将已检查的复选框代码传递给JavaScript中的C#。我能够通过JSON发送代码。我的JSON值是JArray。我在标题中得到例外。
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" });
}
客户端:
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"
});
}
请帮我解决此错误。
答案 0 :(得分:15)
在这种情况下,我认为JsonConvert.DeserializeObject
是不适合使用的方法。有关从JArray
转换为JToken
的错误可能是因为DeserializeObject
正在尝试直接反序列化为JObject
,因为它无法在JObject
上找到必填字段{1}}。
尝试使用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
}
答案 1 :(得分:10)
它可以从JArray转换为List array.ToObject<List<TargetDataType>>();
答案 2 :(得分:1)
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" });
}