解析json数组数据

解析json数组数据

问题描述:

我有下面的代码,在按钮上单击我做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

你需要转换为正确的类型列举:

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

由于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