如何解决在 JSON.NET 中反序列化的转换接口
如果您必须将 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; }
}
解决方法
我正在尝试设置一个阅读器,它将接收来自各种网站的 JSON 对象(想想信息抓取)并将它们翻译成 C# 对象。我目前正在使用 JSON.NET
进行反序列化过程。我遇到的问题是它不知道如何处理类中的接口级属性。所以自然的东西:
public IThingy Thing
会产生错误:
无法创建 IThingy 类型的实例。类型是接口或抽象类,不能实例化。
让它成为 IThingy 而不是 Thingy 相对重要,因为我正在处理的代码被认为是敏感的,并且单元测试非常重要。对于像 Thingy
这样成熟的对象,无法模拟原子测试脚本的对象。它们必须是一个接口。
我已经研究 JSON.NET 的文档一段时间了,我可以在这个网站上找到的与此相关的问题都是一年多以前的。有什么帮助吗?
此外,如果重要的话,我的应用程序是用 .NET 4.0 编写的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。