【问题标题】:How to define an implicit deserializer using Play Json for generic types如何使用 Play Json 为泛型类型定义隐式反序列化器
【发布时间】:2018-03-28 06:07:08
【问题描述】:

我有一个接受 T 的方法,我想做Json.parse(someString).as[T]

现在我传入的 T 类定义了隐式格式,例如 implicit lazy val format: Format[Foo] = ...。但是,我希望能够告诉编译器在运行时找到隐式格式,而不是抱怨“No Json deserializer found for type T”。

【问题讨论】:

    标签: scala playframework play-json


    【解决方案1】:

    这样做的正确方法是在T 上添加context bound

    def yourMethod[T: Reads](...) = ...
    

    它不会在运行时寻找隐式(Scala 不能这样做),但如果没有像 format 这样的隐式在范围内可用,它不会让你调用该方法。如果有,它只会将它传递给as 和任何其他需要它的方法。

    如果您的方法既需要序列化又需要序列化,则需要两个边界:T: Reads: Writes 或只需 T: Format

    【讨论】:

    • 谢谢。我还必须添加一个 TypeTag 上下文绑定,以便仅在我的情况下对类型的一些特殊情况处理进行绑定,但答案非常有效。
    猜你喜欢
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 2017-04-18
    • 1970-01-01
    • 2019-05-13
    相关资源
    最近更新 更多