微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 JSON.NET 中反序列化的转换接口

如何解决在 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 举报,一经查实,本站将立刻删除。