2016-02-06 127 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