我正在尝试设置一个阅读器,它将从各个网站获取 JSON 对象(想想信息抓取)并将它们转换为 C# 对象。我目前正在使用 JSON.NET 进行反序列化过程。我遇到的问题是它不知道如何处理类中的接口级属性。所以一些自然的东西:
public IThingy Thing
会产生错误:
无法创建 IThingy 类型的实例。类型是接口或抽象类,无法实例化。
让它成为 IThingy 而不是 Thingy 相对重要,因为我正在处理的代码被认为是敏感的,并且单元测试非常重要。对于像 Thingy 这样成熟的对象来说,模拟原子测试脚本的对象是不可能的。它们必须是一个接口。
我已经研究 JSON.NET 的文档有一段时间了,我在这个网站上找到的与此相关的问题都是一年多前的。有什么帮助吗?
另外,如果重要的话,我的应用程序是用 .NET 4.0 编写的。
@SamualDavis 提供了一个很好的解决方案相关问题 https://stackoverflow.com/questions/2254872/using-json-net-converters-to-deserialize-properties,我将在这里总结一下。
如果您必须将 JSON 流反序列化为具有接口属性的具体类,您可以包含具体类作为该类的构造函数的参数!NewtonSoft 反序列化器足够聪明,可以发现它需要使用这些具体类来反序列化属性。
这是一个例子:
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; }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)