【问题标题】:LoganSquare not including field name on generated JsonLoganSquare 不包括生成的 Json 上的字段名称
【发布时间】:2015-12-21 16:37:48
【问题描述】:

我有一堂课DbRecord

public class DbRecord {


    @JsonField(name="on_duties")
    List<OnDutyElement> onDuties;

    @JsonField(name = "date_time")
    DateTime dateTime;

当我尝试序列化此类的对象时,LoganSquare 不包含 dateTime 字段。

生成的 JSON:{:"2015-12-21T11:32:17.503-05:00","on_duties":[{...everything normal from here

【问题讨论】:

  • 这看起来更像是 LoganSquare 中的错误,而不是您的代码中的错误。您可能应该在 github 上提交错误报告。

标签: android logan-square


【解决方案1】:

如果所有 JSON 字段名称都是带下划线的小写字母,您可以像这样定义 fieldNamingPolicy。

@JsonObject(fieldNamingPolicy = JsonObject.FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
public class DbRecord {


@JsonField
List<OnDutyElement> onDuties;

@JsonField
DateTime dateTime;

如果您还没有这样做,您还需要为 DateTime 设置 TypeConverter,LoganSquare 现在允许您像这样在 JsonField 注释中定义 TypeConverter

 @JsonField(typeConverter = DateTimeConverter.class)
DateTime time;

和 DateTimeConverter

public class DateTimeConverter implements TypeConverter<DateTime> {
@Override
public DateTime parse(JsonParser jsonParser) throws IOException {
    String dateString = jsonParser.getValueAsString(null);
    try {
        DateTime dateTime = new DateTime(dateString);
        return dateTime.changeTimeZone(TimeZone.getTimeZone("UTC"), TimeZone.getDefault());
    } catch (RuntimeException runtimeException) {
        runtimeException.printStackTrace();
        return null;
    }
}

@Override
public void serialize(DateTime object, String fieldName, boolean writeFieldNameForObject, JsonGenerator jsonGenerator) throws IOException {
    jsonGenerator.writeStringField(fieldName, object.format("YYYY-MM-DDThh:mm:ss"));
}

}

【讨论】:

    【解决方案2】:

    可能存在错误。 编写你自己的扩展DateTypeConverterTypeConverter,覆盖serialize() 方法显式传递writeFieldName 值为true

    这将强制类型转换器将字段名称写入写入器。

    【讨论】:

    • 我在TypeConverter 中使用的是jsonGenerator.writeString 而不是jsonGenerator.writeStringField
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    相关资源
    最近更新 更多