我正在使用Json.net 4.5。我已經使用Json序列化了PatientV1,並試圖將其滅活到PatientV2中。序列化發生很好。如何處理在參數化構造函數上執行json.net反序列化時引發的異常
但是,當我在AppUtility.CreatePatientNr
(如果傳遞任何空值或空值時拋出異常)中引入驗證檢查,則反序列化失敗。
我已經嘗試使用派生的JsonConverter來創建PatientV2對象,我有控制權將「正確」值傳遞給構造函數,但是我無法在創建對象之後設置正確的PatientNr,因爲它是隻讀的。
我不想使用反射。 Json.net是否提供了在JsonConverter中設置只讀屬性patientV2.PatientNr
的方法?
有沒有辦法忽略此異常或任何其他的方法來創建PatientV2對象?
//version 1.0. Legacy code with no Json tag
public class PatientV1
{
public int PatId { get; set; }
}
//Version 2.0
public class PatientV2
{
public PatientV2(string Id, string s1, string s2)
{
PatientNr = AppUtility.CreatePatientNr(Id, s1, s2);
}
//PatId is renamed to a string type. It now has private set
[JsonProperty("PatId")]
public string PatientNr { get; private set; }
}
EDIT1:不JSON有用於deserialisation就像二進制序列化任何具體的構造?
你爲什麼不try/catch語句在構造函數中的'AppUtility.CreatePatientNr'電話嗎? – nemesv
在我的正常用法中,我想要引發異常,以便在不傳遞適當的值來構造對象時不應創建對象。將參數驗證代碼移到構造函數的外部將需要更多的努力來處理所有這些類似的類,所以試圖找出一個更好的簡單方法 – keyr
[如何將參數傳遞給非默認構造函數?](http:// stackoverflow .COM /問題/ 8254503 /如何到傳遞參數到一個-非默認的構造函數) – Flexo