在JSON.NET 中轉換用於反序列化的介面
使用JSON.NET 進行反序列化時,在處理以下類別時會出現一個常見問題:包含介面級屬性。錯誤「無法建立 IThingy 類型的實例。類型是介面或抽象類,無法實例化」表示 JSON.NET 無法反序列化介面。
要解決此問題,請使用建議的解決方案作者:@SamualDavis 在類似的線程中:
包含具體類別作為建構子參數:
聲明具有介面屬性的類別時,將具體類別作為其建構子的參數。這樣,JSON.NET 就可以辨識出反序列化期間要使用的特定類別。
構造函數範例:
public class Visit : IVisit { /// <summary> /// This constructor is required for the JSON deserializer to be able /// to identify concrete classes to use when deserializing the interface properties. /// </summary> public Visit(MyLocation location, Guest guest) { Location = location; Guest = guest; } public long VisitId { get; set; } public ILocation Location { get; set; } public DateTime VisitDate { get; set; } public IGuest Guest { get; set; } }
透過遵循這種方法,JSON.NET 將能夠成功地將JSON 物件反序列化為C# 對象,甚至如果它們包含介面級屬性。
以上是如何在 JSON.NET 中使用介面屬性反序列化 JSON?的詳細內容。更多資訊請關注PHP中文網其他相關文章!