我正在尝试使用 kotlinx-serialization-protobuf 库版本 1.3.2 在我的 Android 应用程序中解码来自服务器的对象。
该对象有一个 FloatArray 属性:
@Serializable
class MyClassProtobuf {
@Serializable
data class Template(
@ProtoNumber(1)
val createdAt: Long,
@ProtoNumber(2)
val vector: FloatArray
)
}
解码时:
val serverTemplate = protobuf.decodeFromByteArray(MyClassProtobuf.Template.serializer(), response)
我收到错误:
W/System.err: kotlinx.serialization.protobuf.internal.ProtobufDecodingException: Expected wire type 5, but found 2
W/System.err: at kotlinx.serialization.protobuf.internal.ProtobufReader.readFloat(ProtobufReader.kt:197)
W/System.err: at kotlinx.serialization.protobuf.internal.ProtobufDecoder.decodeTaggedFloat(ProtobufDecoding.kt:157)
W/System.err: at kotlinx.serialization.protobuf.internal.ProtobufTaggedDecoder.decodeFloatElement(ProtobufTaggedDecoder.kt:66)
W/System.err: at kotlinx.serialization.internal.FloatArraySerializer.readElement(PrimitiveArraysSerializers.kt:229)
W/System.err: at kotlinx.serialization.internal.FloatArraySerializer.readElement(PrimitiveArraysSerializers.kt:220)
W/System.err: at kotlinx.serialization.internal.AbstractCollectionSerializer.readElement$default(CollectionSerializers.kt:51)
W/System.err: at kotlinx.serialization.internal.AbstractCollectionSerializer.merge(CollectionSerializers.kt:36)
W/System.err: at kotlinx.serialization.protobuf.internal.ProtobufDecoder.decodeSerializableValue(ProtobufDecoding.kt:190)
W/System.err: at kotlinx.serialization.protobuf.internal.ProtobufTaggedDecoder.decodeSerializableElement(ProtobufTaggedDecoder.kt:82)
我很肯定服务器正在将浮点数组发送回 Android 应用程序。我什至可以成功执行逆过程:在 Android 应用程序中对对象进行编码,将其发送到服务器并在服务器中对其进行解码。
顺便说一句,服务器中的对象具有 proto3 格式。
有谁知道为什么会出现这个错误?任何帮助将不胜感激!
谢谢!