scala - 反序列化后受案例类定义位置影响的结构相等性

标签 scala equals json4s

为什么在反序列化到案例类实例之后,结构相等比较会受到案例类定义的位置是在另一个类的内部还是外部的影响。例如,以下代码段中的断言

package example

import org.json4s.DefaultFormats
import org.json4s.native.JsonMethods.parse

class Foo {
  case class Person(name: String)
  def bar = {
    implicit val formats = DefaultFormats
    val expected = Person(name = "picard")
    val actual = parse("""{"name": "picard"}""").extract[Person]
    assert(expected == actual, s"$expected == $actual")
  }
}

object Main extends App {
  (new Foo).bar
}

失败
`java.lang.AssertionError: assertion failed: Person(picard) == Person(picard)`

如果我们移动它就会过去 Person外定义class Foo像这样
case class Person(name: String)
class Foo {
  def bar = {
    ...
    assert(expected == actual, s"$expected == $actual")
  }
}

请注意,在这两种情况下,反序列化似乎都是成功的,例如,
assert(expected.name == actual.name)

不管case class Person都满意定义位置。

也许它在某种程度上受到了隐含的 Manifest 的影响。传递给 extract ?

最佳答案

这是一个错误。

https://github.com/json4s/json4s/issues/564
“反序列化的内部案例类无法与代码中初始化的案例类进行比较”

关于scala - 反序列化后受案例类定义位置影响的结构相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55890176/

相关文章:

Bash 脚本 if -eq

java - 在 Java 中使用 Inheritance Equality 有什么问题?

json - 使用 json4s 将 scala 对象转换为 json

scala - 当将 HList 与 GADT 一起使用时,我必须使用 asInstanceOf[H] 进行转换。有没有办法避免 Actor 阵容?

scala - 在 Scala 中转换日期格式

c# - 正确实现GetHashCode

scala - @JsonIgnore使用Jackson和Json4s序列化Scala案例类属性

Scala 编译错误 : "No implicit view available" and "diverging implicit expansion"

scala - Json4s 忽略 @JsonProperty jackson 注释

scala - "illegal cyclic reference involving object InterfaceAudience"使用 Scala 2.11 反射时