2016-02-06 27 views
0

我有一个类,像这样:反序列化与自定义对象属性对象

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

我平时知道的JSON Certification确实应该像"certification": { "id": 2} ,但是,我没有权限更改JSON,因此我必须弄清楚如何将接收到的内容("certification": 2)转换为我的对象...有没有办法可以使用JavascriptSerializerNewtonSoft执行此操作?

+0

你的代码更改为'公共列表 expiredCertifications {获得;组; '',稍后将它解析到你的'Certification'类。 – cramopy

回答

1

你可以做这样的事情:

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;} 
    ... 
} 
+0

谢谢,这是一个很好的方法来解决这个问题! :) – LocustHorde

0

要正确生成类,我会建议复制JSON和要存储的类打开文件,在Visual Studio中去编辑 - >粘贴Special->粘贴JSON作为类

那么你会做这样的事情:

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

对不起,更改对象也不是一个选项,它们是预先存在的EF模型,我不能更改JSON和模型 - 我已经和我的TL和经理进行了几次相同的讨论;我不得不与这工作不幸! – LocustHorde

+0

好的,所以,而不是RootObject,你会使用CareTaker –

+0

对不起,我不认为你理解我的问题吧.. – LocustHorde