首页 > 解决方案 > 如何反序列化 Json 数组以列出(或)数组

问题描述

我从 Ajax 调用中获取数据,它给出的 json 输出在下面提到在我的代码隐藏作业表参数中有json Array 对象如何在反序列化中传递该参数并从中获取值

这是我的 Json 输出:

string Jobsheet =[{"var_name_data":"Demo1Demo2Demo3Demo4Demo5Demo6Demo7Demo8Demo9Demo10 1,2,3,4,5,6,7,8,9,10"}]

我的课:

 public class RootObject
{
    public List<User> var_name_data { get; set; }
}

public class User
{
    public string first_name { get; set; }
    public int customer_id { get; set; }
}

在我的代码隐藏中:

   [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static object Details4(string selectedJobSheet)
    {

        try
        {
            var des = (RootObject)Newtonsoft.Json.JsonConvert.DeserializeObject(selectedJobSheet, typeof(RootObject));

            return des.var_name_data.Count.ToString();


        }
        catch (Exception)
        {

            throw;
        }

    }

它抛出一个异常:

EBCheckList.dll 中出现“Newtonsoft.Json.JsonSerializationException”类型的异常,但未在用户代码中处理附加信息:无法将当前 JSON 数组(例如 [1,2,3])反序列化为“EBCheckDAL.RootObject”类型,因为该类型需要一个 JSON 对象(例如 {"name":"value"})才能正确反序列化。要修复此错误,请将 JSON 更改为 JSON 对象(例如 {"name":"value"})或将反序列化类型更改为数组或实现集合接口的类型(例如 ICollection、IList),例如可以从 JSON 数组反序列化。JsonArrayAttribute 也可以添加到类型中以强制它从 JSON 数组反序列化。路径'',第 1 行,位置 1。发生

请帮我将上述 json 数据转换为列表(或)元素数组

标签: arraysjsonc#-4.0json.netasp.net-ajax

解决方案


您可以反序列Jobsheet化对象列表而不是RootObject,如以下代码:
1 - 创建与 json 对象匹配的对象:

public class User
{
    public string Var_name_data { get; set; }
}

2 - 反序列化Jobsheet

string Jobsheet = @"[{""var_name_data"":""Demo1Demo2Demo3Demo4Demo5Demo6Demo7Demo8Demo9Demo10 1,2,3,4,5,6,7,8,9,10""}]";

List<User> users = JsonConvert.DeserializeObject<List<User>>(Jobsheet);

演示

foreach(User user in users)
{
    Console.WriteLine(user.Var_name_data);
}
// or
Console.WriteLine(users.count);

结果

Demo1Demo2Demo3Demo4Demo5Demo6Demo7Demo8Demo9Demo10 1,2,3,4,5,6,7,8,9,10
//or
1

我希望这会对你有所帮助。


推荐阅读