当前位置: 首页 > 知识库问答 >
问题:

Moshi自定义域不能用于序列化

沈俊美
2023-03-14

我正在Android上使用Moshi 1.8.0,并按照Moshi文档中的说明创建自定义字段:https://github.com/square/Moshi#custom-field-names-with-json

这意味着我的请求数据类是这样的:

data class GetStuff(
        @Json(name = "RequestContext") val context: RequestContext,           
)

但问题是实际的HTTP请求是这样发送的:

{"context": "blah... }

我所期待的是我的请求是这样的:

{"RequestContext": "blah... }

这似乎对响应工作得很好,但我不知道如何使它对请求工作。

谢谢!这难道不是@json(name=“”)注释对请求的工作方式吗?

共有1个答案

慎懿轩
2023-03-14

我是个白痴。

我会为将来需要的人回答这个问题(很可能是我)。

为了将Json转换为数据类,您必须将API调用更改为具有以下注释:

@MoshiDeserialization

我知道这一点,这就是使反序列化工作的神奇注释。

但是,我不知道我还需要第二个神奇的注释来使序列化部分也能工作:

@MoshiSerialization

现在起作用了。

 类似资料:
  • 问题内容: 我正在尝试创建将影响序列化值的自定义杰克逊注释。 含义: 现在序列化对象X(10)将导致: 我该如何实现? 问题答案: 结果:

  • 我使用一个API,它以数组的形式返回数据,比如这个JSON字符串(我们称之为“任务”) 我想将这个响应解析为一个列表。所以我已经用生成的适配器创建了相应的数据类 我的改装服务是这样的 但我想使用容器类型,例如: 作为网络响应结果。这可能不创建自定义adpter或者我将需要创建一个自定义适配器并将其传递给moshi构建器吗?

  • 问题内容: 根据这个答案:http://codingdict.com/questions/137507 我写了这样的序列化器: 如果注释存在且字段为,则女巫应该写字符串“ N / A” 。但是仅对非空字段调用方法。 另外,我尝试致电: 通过这样的实现: 但是没有结果。 如何以这种方式处理空字段? 更新资料 根据讨论:https : //github.com/FasterXML/jackson- d

  • 根据这个答案:https://stackoverflow.com/a/43342675/5810648 我编写了这样的序列化程序: 如果注释存在并且字段为,则Witch应该编写字符串“N/A”。但是方法仅对非空字段调用。 此外,我还尝试调用setNullValueSerializer: 有了这样的实施: 但没有结果。 如何以这种方式处理空字段? 使现代化 根据讨论:https://github.c

  • 我阅读了Jackson的annotations文档,但是我仍然找不到如何从annotations调用自定义序列化程序来序列化< code>java.sql.Date对象。 但是注释似乎只接受布尔值作为参数,而注释doc则表示: @JsonValue(method):用于标记返回值用作对象序列化的方法;通常用于标记生成字符串的方法(如toString())以生成JSON原语值序列化块引号 我是否使用

  • 下面的代码再现了这个问题: 上面的代码不做其他注册“自定义”序列化程序的事情(只是委托回原始序列化程序),但它生成的JSON没有null属性: {“第一个”:“鲍勃”,“最后一个”:“巴克”} 我读过许多看似相关的SO文章,但没有一篇能让我找到解决方案。我尝试在序列化时显式地将映射器设置为,但没有成功。 我唯一的线索是JavaDoc for JsonSerializer中的一条注释: 注意:永远不