首页 > 解决方案 > 使用许多嵌套案例类播放 JSON 错误

问题描述

我有大量的嵌套案例类,我为其添加了隐式格式化程序。最初,当我声明这些格式化程序时,我遇到了一些排序问题,但是一旦我能够对所有排序进行排序,我就会得到一些其他错误,例如:

Error:(57, 56) forward reference extends over definition of value zombType
    implicit val varFmt: OFormat[Variant] = Json.format[Variant]

这是我在许多不同文件中定义的案例类集:

在一个名为 commontypes 的包中,我有以下一组案例类:

sealed trait BuiltInType { def id: Int }
  case class ZombieType          (a: String,        id: Int = 0) extends BuiltInType
  case class BooleanType         (a: Boolean,       id: Int = 1) extends BuiltInType
  case class ByteType            (a: Byte,          id: Int = 2) extends BuiltInType
  case class UByteType           (a: Byte,          id: Int = 3) extends BuiltInType
  case class Int16Type           (a: Int,           id: Int = 4) extends BuiltInType
  case class UInt16Type          (a: Int,           id: Int = 5) extends BuiltInType
  case class Int32Type           (a: Int,           id: Int = 6) extends BuiltInType
  case class UInt32Type          (a: Int,           id: Int = 7) extends BuiltInType
  case class Int64Type           (a: Long,          id: Int = 8) extends BuiltInType
  case class UInt64Type          (a: Long,          id: Int = 9) extends BuiltInType
  case class FloatType           (a: Float,         id: Int = 10) extends BuiltInType
  case class DoubleType          (a: Double,        id: Int = 11) extends BuiltInType
  case class StringType          (a: String,        id: Int = 12) extends BuiltInType
  case class DateTimeType        (a: Long,          id: Int = 13) extends BuiltInType // FIXME: Wrong type used, fix it later
  case class GuidType            (a: UUID,          id: Int = 14) extends BuiltInType
  case class ByteStringType      (a: Vector[Byte],  id: Int = 15) extends BuiltInType
  case class XmlElementType      (a: String,        id: Int = 16) extends BuiltInType
  case class NodeIdType          (a: NodeId,        id: Int = 17) extends BuiltInType
  case class ExpandedNodeIdType  (a: NodeId,        id: Int = 18) extends BuiltInType 
  case class StatusCodeType      (a: StatusCode,    id: Int = 19) extends BuiltInType
  case class QualifiedNameType   (a: QualifiedName, id: Int = 20) extends BuiltInType
  case class LocalizedTextType   (a: LocalizedText, id: Int = 21) extends BuiltInType
  case class ExtensionObjectType (a: ExtensionObject, id: Int = 22) extends BuiltInType 
  case class DataValueType       (a: DataValue,       id: Int = 23) extends BuiltInType 
  case class VariantType         (a: Variant,       id: Int = 24) extends BuiltInType
  case class DiagnosticInfoType  (a: String,        id: Int = 25) extends BuiltInType 

在另一个名为 headertypes 的包中,我定义了以下一组案例类:

sealed trait ExtensionObjectEncoding
      case class ByteStringEncoding(bytes: Vector[Byte]) extends ExtensionObjectEncoding
      case class XmlElementEncoding(xmlElement: String) extends ExtensionObjectEncoding
  case class ExtensionObject(
    encodingTypeId: NodeId,
    encodedBody: ExtensionObjectEncoding
  )

  case class DataValue(
    value: Variant,
    status: StatusCode,
    sourceTime: Long, // TODO: Need to be a Datetime type
    sourcePicoseconds: Int,
    serverTime: Long, // TODO: Need to be a Datetime type
    serverPicoseconds: Int
  )

  case class KeyValueProperty(
    qName: QualifiedName,
    value: Variant
  )

sealed trait VariantData
  case class SimpleOrder(rows: Vector[BuiltInType]) extends VariantData
  case class HigherOrder(matrices: Vector[VariantData]) extends VariantData

这是GitHub 项目,我已经在一个名为 DataSetMetaDataParserSpec 的文件中声明了所有隐式格式,这是我正在编写的一个测试!

知道如何解决此错误吗?

标签: scalaplay-json

解决方案


推荐阅读