解析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:
你需要转换为正确的类型列举:
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
非常感谢。那样做了。我还更新了我的代码以使用适当的数据模型。 – user1563677
由于JArray是Newtonsoft,你可以使用类似这样通过结果来反序列化,然后循环:
var m_json = JsonConvert.DeserializeObject(ar);
foreach (var item in m_json)
{
Console.Write(item.name);
}
这个抛出错误:CS1579 \t由于'对象'不包含'GetEnumerator'的公共定义,因此foreach语句无法对'object'类型的变量进行操作 – user1563677
看到我更新的问题。看起来我的阵列没有正确构建。在我如何向我的控制器发送数据时是否存在一些问题 – user1563677