Wire JSON¶
Wire 通过 Moshi 或 Gson 提供 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 会忽略它们。