【问题标题】:JSON Deserializing Returns Null for Sub ListJSON 反序列化为子列表返回 Null
【发布时间】:2018-02-22 16:22:08
【问题描述】:

我正在尝试反序列化以下 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 类中的所有值都是空的。

我已参考以下两篇帖子寻求答案,但似乎没有任何欺骗行为。

【问题讨论】:

  • 修复不公开的属性!
  • @cleftheris 谢谢,看了这个感觉很傻。
  • @w-harr 很高兴它成功了。

标签: c# json


【解决方案1】:

修复Gender2AlternateCodes 上的属性,它们不公开!反序列化程序将无法找到您的任何属性,因此这可能是无法填充的原因。

【讨论】:

    【解决方案2】:

    问题在于属性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后反序列化成功:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      相关资源
      最近更新 更多