【问题标题】:Parse json array data解析json数组数据
【发布时间】:2017-10-12 20:57:36
【问题描述】:

我有以下代码,在单击按钮时,我对 c# 控制器进行了 ajax 调用。我还需要将一些值传递回控制器。

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"}]

在我的循环中,我想获取 is 和 name 值。我试过了

JArray v = JArray.Parse(ar);

但不能循环并获取值

更新:

我认为我的 json 数组存在问题,因此我无法在我的 c# 控制器中获取 json 数组的值。

当我在 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"}]

我认为这是不正确的,因为当我使用以下代码时: 动态的东西 = JObject.Parse(ar);

它抛出错误:

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

【问题讨论】:

  • 查看我更新的问题。看起来我的数组构造不正确。我如何将数据发送到我的控制器是否存在一些问题

标签: c# json


【解决方案1】:

您需要转换为正确的类型才能枚举:

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

【讨论】:

  • 非常感谢。做到了。我还更新了我的代码以使用正确的数据模型。
【解决方案2】:

由于 JArray 是Newtonsoft,你可以使用类似这样的东西来反序列化然后循环遍历结果:

var m_json = JsonConvert.DeserializeObject(ar);

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

【讨论】:

  • 此抛出错误:CS1579 foreach 语句无法对“object”类型的变量进行操作,因为“object”不包含“GetEnumerator”的公共定义
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 2010-10-25
  • 2016-08-08
相关资源
最近更新 更多