【问题标题】:Can't deserialize the current json array into type无法将当前 json 数组反序列化为类型
【发布时间】:2016-04-06 04:01:22
【问题描述】:

虽然我遇到了之前问过的相同主题,但我只是找不到合适的解决方案。

这是我发布到 Web api 控制器的示例 Json

      {
      "AppointmentId ":2079,       
       "manageaptarray":[  
       "VanId":6,
       "Doctors":[
         {"Id":1,"Name":Doc1},
         {"Id":2,"Name":Doc2}
      ]          
      ]}

这是我的 c# 类

    public class ManageDoctorModel
{
    public int Id { get; set; }
    public int AppointmentId { get; set; }
    public DateTime? AppointmentAt { get; set; }
    public DateTime ScheduledAt { get; set; }
    public int? ModifiedBy { get; set; }
    public DateTime? ModifiedDateTime { get; set; }
    public Nullable<bool> rCreate { get; set; }
    public Nullable<bool> rUpdate { get; set; }
    public Nullable<bool> rDelete { get; set; }
    public Nullable<bool> rView { get; set; }
    public jsonarray[] manageaptarray { get; set; }
}



public class jsonarray
{
    public int VanId { get; set; }

    public string VanName { get; set; }

    public List<Doctorslist> Doctors { get; set; }
}
}

当我这样做时,我收到错误“无法将当前 json 数组(例如 1 2 3 )反序列化为类型......”

我在堆栈和其他论坛上搜索了大多数建议是反序列化 json 数组。所以这是我在我的 c# 代码中所做的

List<jsonarray> jsondata = JsonConvert.DeserializeObject<System.Collections.Generic.List<jsonarray>>(value.manageaptarray.ToString());

注意:值是我得到这个 json 的参数。

我尝试在我的类文件中进行一些更改,例如做 idictionary&lt;string,object&gt;,但这给了我同样的错误。

因为我正在使用 angularjs,所以我尝试了以下方法

json.stringify(jsondata)
angular.tojson(jsondata)
json.parse(jsondata)

但是没有运气。请在这里帮助我。据我所知,我认为在数组中传递数组是导致麻烦的问题。所以如果有人可以帮助我解决这个问题,那就是太好了,这样我就不会在这上面浪费更多时间了。

提前致谢,祝大家2016年新年快乐

请注意 mods :我知道这是一个重复的问题,但大多数问题都没有处理 json 中的数组数组。

【问题讨论】:

  • 您的 JSON 无效。
  • 有没有一种方法可以让我以正确的方式对其进行构图,例如修剪或删除括号?在 angularjs 中

标签: c# arrays angularjs json asp.net-web-api


【解决方案1】:

您在问题中显示的 JSON,不是有效的 JSON:

{
    "AppointmentId ":2079,       
    "manageaptarray": [  
        "VanId": 6,
        "Doctors": [
            {
                "Id":1,
                "Name": Doc1
            },
            {
                "Id":2,
                "Name":Doc2
            }
        ]          
    ]
}

manageaptarray 是无效的数组语法,在 JSON 语法中,Doc1 和 Doc2 也不是有效值,可能是字符串,所以应该在双引号之间。

您必须先修复 JSON,然后您可以查看我的答案 Deserialize JSON into Object C#,它展示了如何使用 Visual Studio 2013/15 在 C# 类中转换有效的 JSON。

一个有效的 JSON 应该是这样的:

{
    "AppointmentId ":2079,       
    "manageaptarray": [  
        {
            "VanId": 6,
            "Doctors": [
                {
                    "Id":1,
                    "Name": "Doc1"
                },
                {
                    "Id":2,
                    "Name": "Doc2"
                }
            ]          
        }
    ]
}

与此匹配的 C# 类是:

public class Rootobject
{
    public int AppointmentId { get; set; }
    public Manageaptarray[] manageaptarray { get; set; }
}

public class Manageaptarray
{
    public int VanId { get; set; }
    public Doctor[] Doctors { get; set; }
}

public class Doctor
{
    public int Id { get; set; }
    public string Name { get; set; }
}

然后您现在可以使用以下方法将此 JSON 反序列化为一个类:

Rootobject jsondata = JsonConvert.DeserializeObject<Rootobject>(jsonString);

【讨论】:

  • 你说得对,json 不仅是格式的问题,而且是整个 json 的问题。设法做一些前端工作来循环一个范围,然后在 json voila api 最终到达断点时推送数据.谢谢队友:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
  • 2019-03-20
相关资源
最近更新 更多