LoganSquare不包括生成的Json上的字段名称

时间:2015-12-21 16:37:49

标签: android logan-square

我有一个班级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

2 个答案:

答案 0 :(得分:4)

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

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


@JsonField
List<OnDutyElement> onDuties;

@JsonField
DateTime dateTime;

如果你还没有这样做,你还需要为DateTime安装TypeConverter,LoganSquare现在允许你在JsonField Annotation中定义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"));
}

}

答案 1 :(得分:3)

可能有一个错误。 编写自己的fessmodule.directive('format', ['$filter', function ($filter) { return { require: '?ngModel', link: function (scope, elem, attrs, ctrl) { if (!ctrl) return; ctrl.$formatters.unshift(function (a) { return $filter(attrs.format)(ctrl.$modelValue) }); ctrl.$parsers.unshift(function (viewValue) { var plainNumber = viewValue.replace(/[^\d|\-+|\.+]/g, ''); elem.val($filter(attrs.format)(plainNumber)); return plainNumber; }); } }; }]); TypeConverter,覆盖DateTypeConverter方法显式传递serialize(),其值为writeFieldName

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