2017-10-11 169 views
0

我有下面的代碼,在按鈕上單擊我做ajax調用c#控制器。我還需要將一些值傳回給控制器。解析json數組數據

var array = JSON.stringify(myArrayList); 

    $.ajax({ 
      type: "POST",     
      dataType: 'json', 
      data: { 
       'type': vm.myType, 
       'mod': vm.myMod, 
       'ar' : array 
      }, 
      url: rootDir + "/Home/GetData",        
      success: function (data) { 
       console.log(data);     
      }, 
      error: function (xhr, status, error) { 
       console.log("Error"); 
      }     
     }); 

而且在我的C#控制器我有:

[HttpPost] 
    public IActionResult GetData(string type, string mod, string ar) 
    { 
     //I can get type and mod but having issues in getting my array data 
    } 

我陣列的數據如下:

[{"id":"1","name":"John"},{"id":"2","name":"Steve"}] 

在我的循環我要搶是和名稱值。我

JArray v = JArray.Parse(ar); 

,但不能循環嘗試,但並獲取值

更新時間:

我認爲有問題的json數組,因爲這些我不能得到的值的JSON數組在我的C#控制器。

當我調試我的Java腳本陣列具有值是這樣的:

Array(2) 
0 Object 
    id: "1" 
    name: "John" 
1 Object 
    id: "2" 
    name: "Steve" 

後,我用Json.stringify如下:

var array = JSON.stringify(myArrayList); 

現在在我的C#控制器我得到的結果字符串爲:

[{"id":"1","name":"John"},{"id":"2","name":"Steve"}] 

這我覺得是不正確的,因爲當我使用下面的代碼: dynamic stuff = JObject.Parse(ar);

它拋出錯誤:

'Error reading JObject from JsonReader. Current JsonReader item is not an object: 
+0

看到我更新的問題。看起來我的陣列沒有正確構建。在我如何向我的控制器發送數據時是否存在一些問題 – user1563677

回答

2

你需要轉換爲正確的類型列舉:

using Newtonsoft.Json; 
using Newtonsoft.Json.Linq; 

string ar = "[{\"id\":\"1\",\"name\":\"John\"},{\"id\":\"2\",\"name\":\"Steve\"}]"; 

var obj = JsonConvert.DeserializeObject(ar); 

foreach (var item in ((JArray)obj)) 
{ 
    Console.WriteLine(
     string.Format("id:{0}, name:{1}", 
         item.Value<int>("id"), 
         item.Value<string>("name"))); 
} 

輸出

id:1, name:John 
id:2, name:Steve 

但我真的建議你同步前端和後端的數據模型

public class Person 
{ 
    [JsonProperty(PropertyName = "id")] 
    public int Id { get; set; } 

    [JsonProperty(PropertyName = "name")] 
    public string Name { get; set; } 
} 

var obj = JsonConvert.DeserializeObject<List<Person>>(ar); 

foreach (var person in obj) 
{ 
    Console.WriteLine(
     string.Format("id:{0}, name:{1}", 
         person.Id, 
         person.Name)); 
} 

輸出

id:1, name:John 
id:2, name:Steve 
+0

非常感謝。那樣做了。我還更新了我的代碼以使用適當的數據模型。 – user1563677

0

由於JArray是Newtonsoft,你可以使用類似這樣通過結果來反序列化,然後循環:

var m_json = JsonConvert.DeserializeObject(ar); 

foreach (var item in m_json) 
{ 
    Console.Write(item.name); 
} 
+0

這個拋出錯誤:CS1579 \t由於'對象'不包含'GetEnumerator'的公共定義,因此foreach語句無法對'object'類型的變量進行操作 – user1563677