在 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中文网其他相关文章!