跳到内容

Wire JSON

Wire 通过 MoshiGson 提供 JSON 序列化支持。我们为两者都提供了一个适配器工厂,用于配置它们以处理 protobuf 的特殊性。

Moshi

Moshi 支持是 wire-moshi-adapter 模块的一部分。必须将其添加到项目依赖项中,才能将 WireJsonAdapterFactory 插入到 Moshi 中。

Maven 坐标是:com.squareup.wire:wire-moshi-adapter:<version>

val moshi = Moshi.Builder()
      .add(WireJsonAdapterFactory())
      .build()

val adapter = moshi.adapter(Pizza::class.java)
val pizza: Pizza = ...
val json = adapter.toJson(pizza)
val parsedPizza = adapter.fromJson(json)

Gson

Gson 支持是 wire-gson-support 模块的一部分。必须将其添加到项目依赖项中,才能将 WireTypeAdapterFactory 插入到 Gson 中。

Maven 坐标是:com.squareup.wire:wire-gson-support:<version>

val gson = GsonBuilder()
      .registerTypeAdapterFactory(WireTypeAdapterFactory())
      .create()

val adapter = gson.adapter(Pizza::class.java)
val pizza: Pizza = ...
val json = adapter.toJson(pizza)
val parsedPizza = adapter.fromJson(json)

Protoc

Wire 与 protoc 在所有 proto3 消息上都是互操作的。proto2 的 JSON 表示未指定。Wire 和 protoc 生成的 proto2 消息的 JSON 表示不兼容。请注意,默认情况下,Protoc 对未知字段会抛出错误。Wire 会忽略它们。