2014-03-05 111 views
6

我需要將選中的複選框代碼從JavaScript傳遞到C#。我能夠通過JSON發送代碼。而我的JSON值就像JArray一樣。我在標題中得到了例外。無法將Newtonsoft.Json.Linq.JArray轉換爲Newtonsoft.Json.Linq.JToken。當我通過json時發生錯誤

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

這是錯誤? –

+1

我沒有看到一行將JArray轉換爲JToken ... – Sascha

回答

13

在這種情況下,我認爲JsonConvert.DeserializeObject是不適合使用的方法。有關從JArray轉換爲JToken的錯誤可能會發生,因爲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 
} 
+1

@Vaithegi:如果此答案對您有幫助,請不要忘記將您的問題標記爲已回答。 –

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

謝謝Chris Mantle。 –

6

可以從JArray轉換爲列爲array.ToObject<List<TargetDataType>>();

+0

多數民衆贊成正是我正在尋找 – smedasn

+0

@smedasn:很高興幫助謝謝你! – Lucky

相關問題