JSON反序列化为子列表返回Null

时间:2018-02-22 16:22:08

标签: c# json

我试图反序列化以下json:

{"PatientNameID":{"ID":514,"Name":{"First":"Laura","Middle":"X","Last":"Coelho","Suffix":"","Full":"Laura X Coelho","Preferred":""}},"PatientNumber":"254","ChartNumber":"254","Gender":{"LookupType":"Gender","Code":"F","Description":"Female","Order":1,"Active":true,"AlternateCodes":null},"DOB":"4/9/1953","PhoneNumber":"3521029496","SSN":"*****0161"}

这是我尝试反序列化上述JSON的类和子类:

public class PatientList3
{
    public Pat PatientNameID { get; set; }
    public string PatientNumber { get; set; }
    public string ChartNumber { get; set; }
    public Gender2 Gender { get; set; }
    public string DOB { get; set; }
    public string PhoneNumber { get; set; }
    public string SSN { get; set; }
}

public class Pat
{
    public int ID { get; set; }
    public PtName Name { get; set; }
}

public class PtName
{
    public string First { get; set; }
    public string Middle { get; set; }
    public string Last { get; set; }
    public string Suffix { get; set; }
    public string Full { get; set; }
    public string Preferred { get; set; }
}

public class Gender2
{
    string LookupType { get; set; }
    string Code { get; set; }
    string Description { get; set; }
    int Order { get; set; }
    bool Active { get; set; }
    List<AlternateCodes> AlternateCodes { get; set; }
}

public class AlternateCodes
{
    string Code { get; set; }
    string Description { get; set; }
    string CodeSystem { get; set; }
    string CodeSystemName { get; set; }
}

当我反序列化它时,一切顺利,除了Gender2类中的所有值都为null。

我已经提到了以下两个帖子的答案,但似乎没有什么可以去欺骗。

2 个答案:

答案 0 :(得分:3)

修复Gender2&amp;上的属性AlternateCodes他们不公开!反序列化器将无法找到您的任何属性,因此这可能是填充无法填充的原因。

答案 1 :(得分:1)

问题在于属性Gender2AlternateCodes类的访问修饰符,属性的默认访问修饰符为private。你应该把它改成:

public class Gender2
{
    public string LookupType { get; set; }
    public string Code { get; set; }
    public string Description { get; set; }
    public int Order { get; set; }
    public bool Active { get; set; }
    public List<AlternateCodes> AlternateCodes { get; set; }
}

public class AlternateCodes
{
    public string Code { get; set; }
    public string Description { get; set; }
    public string CodeSystem { get; set; }
    public string CodeSystemName { get; set; }
}

将属性设置为public后,它成功反序列化:

enter image description here