无法将当前json数组反序列化为类型

时间:2016-01-01 18:52:15

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

虽然我遇到过之前提到过的同一主题,但我无法找到解决此问题的正确方法。

这是我发布到web api控制器的样本Json

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

这是我的c#class

    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; }
}
}

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

我在堆栈和周围搜索其他论坛的大部分建议都是对json数组进行反序列化。所以这就是我在c#代码中所做的事情

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

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

我在我的类文件中尝试了一些更改,比如使用idictionary <string,object>,但这给了我同样的错误。

由于我正在使用angularjs,我尝试了以下

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

但没有运气。请帮助我。在我所理解的情况下,我认为在阵列中传递阵列是引起麻烦的问题。所以,如果有人能帮助我如何解决这个问题,那将是我不会浪费更多时间在这上面。

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

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

1 个答案:

答案 0 :(得分:3)

您在问题中显示的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);