使用自定义对象属性反序列化为对象

本文关键字:对象 反序列化 属性 自定义 | 更新日期: 2023-09-27 18:33:31

我有一个这样的类:

public class CareTaker
{
    public int Id {get; set;}
    public string name {get; set;}
    public DateTime? DateTrained {get; set;}
    public Certification Certification {get; set;}
    public List<Certification> ExpiredCertifications {get; set;}
}
public class Certification
{
    public int Id {get; set;}
}

我的 JSON 是这样的:

{
    "id": 1,
    "name": "Dogtor",
    "dateTrained": "01 Feb 2017",
    "certification": 2,
    "expiredCertifications": [1,5]
}

我知道通常Certification的 JSON 真的应该像"certification": { "id": 2}一样,但是,我无权更改 JSON,所以我必须弄清楚如何将我收到的内容("certification": 2)转换为我的对象......有没有办法让我用JavascriptSerializer或NewtonSoft做到这一点?

使用自定义对象属性反序列化为对象

你可以做这样的事情:

public class CareTaker
{
    ...
    [NotMapped]
    [JsonProperty(PropertyName = "certification"]
    public int? CertificationId
    {
        get
        {
             return Certification?.Id;
        }
        set
        {
           Certification = new Certification { Id = value; }
        }
    }
    [JsonIgnore]
    public Certification Certification {get; set;}
    ...
}

为了正确生成类,我建议复制 JSON 并打开要存储类的文件,然后在 Visual Studio 中转到编辑>粘贴特殊>粘贴 JSON 作为类

然后你会做这样的事情:

JavaScriptSerializer ser = new JavaScriptSerializer();
var jsonToClasses = ser.Deserialize<RootObject>(json);