Java序列化/反序列化List

huangapple 未分类评论63阅读模式
英文:

Java serializer/deserializer for List<Long>

问题

以下是翻译好的部分:

我需要创建序列化器和反序列化器,因为我遇到了以下错误:

com.fasterxml.jackson.databind.exc.MismatchedInputException: 无法从 START_ARRAY 令牌中反序列化 `java.lang.Long` 的实例

然后我这样做:

public class CalculatorIDsDeserializer extends JsonDeserializer<Long> {
    @Override
    public Long deserialize(final JsonParser jsonParser,
                            final DeserializationContext deserializationContext)
            throws IOException {
        String dataString = jsonParser.getText();
        return Long.parseLong(dataString);
    }
}

以及

public class CalculatorIDsSerializer extends JsonSerializer<Long>{
    @Override
    public void serialize(Long aLong, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeString(Long.toString(aLong));
    }
}

但现在我遇到了以下错误:

com.fasterxml.jackson.databind.JsonMappingException: 无法将 org.hibernate.collection.internal.PersistentBag 强制转换为 java.lang.Long

我为此做了以下更改:

@JsonDeserialize(using = CalculatorIDsDeserializer.class)
@JsonSerialize(using = CalculatorIDsSerializer.class)
private List<Long> insuranceFileIDs = new ArrayList<>();

一些解决方法的提示吗?经过几个小时后,我已经没有更多的想法了。谢谢。

更新: 我将其更改为以下形式,但仍然遇到了相同的错误 Java序列化/反序列化List<Long>

public class CalculatorIDsDeserializer extends JsonDeserializer<List<Long>> {

    @Override
    public List<Long> deserialize(final JsonParser jsonParser,
                                  final DeserializationContext deserializationContext)
            throws IOException {

        String dataString = jsonParser.getText();
        List<Long> ids = null;
        ids.add(Long.parseLong(dataString));
        return ids;
    }
}

更新2:

public class CalculatorIDsSerializer extends JsonSerializer<List<Long>>{

    @Override
    public void serialize(List<Long> longs, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        longs.forEach(item ->{
            try {
                jsonGenerator.writeString(Long.toString(item));
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
    }
}

以及

public class CalculatorIDsDeserializer extends JsonDeserializer<List<Long>> {
    @Override
    public List<Long> deserialize(final JsonParser jsonParser,
                                  final DeserializationContext deserializationContext)
            throws IOException {
        String dataString = jsonParser.getText();
        List<Long> ids = new ArrayList<>();
        ids.add(Long.parseLong(dataString));
        return ids;
    }
}

然后我得到了:无法反序列化属性 'insuranceFileIDs'(预期类型:[简单类型,类 java.lang.Long];实际类型:java.util.ArrayList),问题:参数类型不匹配。

英文:

I need to make serializer and deserializer, because I get this error:

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.Long` out of START_ARRAY token

And I make it:

public class CalculatorIDsDeserializer extends JsonDeserializer&lt;Long&gt; {
    @Override
    public Long deserialize(final JsonParser jsonParser,
                            final DeserializationContext deserializationContext)
            throws IOException {
        String dataString = jsonParser.getText();
        return Long.parseLong(dataString);
    }
}

and

public class CalculatorIDsSerializer extends JsonSerializer&lt;Long&gt;{
    @Override
    public void serialize(Long aLong, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeString(Long.toString(aLong));
    }
}

but now I have this error:

 com.fasterxml.jackson.databind.JsonMappingException: org.hibernate.collection.internal.PersistentBag cannot be cast to java.lang.Long

And I make it for:

@JsonDeserialize(using = CalculatorIDsDeserializer.class)
@JsonSerialize(using = CalculatorIDsSerializer.class)
private List&lt;Long&gt; insuranceFileIDs = new ArrayList&lt;&gt;();

Some tips how to solve it? I have no more ideas after a few hours. Thaks

Update: I change it to this, but I get same error Java序列化/反序列化List<Long>

public class CalculatorIDsDeserializer extends JsonDeserializer&lt;List&lt;Long&gt;&gt; {

    @Override
    public List&lt;Long&gt; deserialize(final JsonParser jsonParser,
                                  final DeserializationContext deserializationContext)
            throws IOException {

        String dataString = jsonParser.getText();
        List&lt;Long&gt; ids = null;
        ids.add(Long.parseLong(dataString));
        return ids;
    }
}

Update2:

public class CalculatorIDsSerializer extends JsonSerializer&lt;List&lt;Long&gt;&gt;{

    @Override
    public void serialize(List&lt;Long&gt; longs, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        longs.forEach(item -&gt;{
            try {
                jsonGenerator.writeString(Long.toString(item));
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
    }
}

and

public class CalculatorIDsDeserializer extends JsonDeserializer&lt;List&lt;Long&gt;&gt; {
    @Override
    public List&lt;Long&gt; deserialize(final JsonParser jsonParser,
                                  final DeserializationContext deserializationContext)
            throws IOException {
        String dataString = jsonParser.getText();
        List&lt;Long&gt; ids = new ArrayList&lt;&gt;();
        ids.add(Long.parseLong(dataString));
        return ids;
    }
}

And i get: Problem deserializing property 'insuranceFileIDs' (expected type: [simple type, class java.lang.Long]; actual type: java.util.ArrayList), problem: argument type mismatch

huangapple
  • 本文由 发表于 2020年4月10日 17:59:36
  • 转载请务必保留本文链接:https://java.coder-hub.com/61137910.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定