【问题标题】:How to use Jackson to deserialize an array of objects when we have written custom deserializer当我们编写自定义反序列化器时,如何使用 Jackson 反序列化对象数组
【发布时间】:2018-08-30 12:44:55
【问题描述】:

我已经编写了一个自定义反序列化器,它将获取字符串并反序列化它 公共静态类 MyDeserializer 扩展 JsonDeserializer {

  @Override
  public MyClass deserialize(JsonParser parser,
                                DeserializationContext deserializer) throws IOException {
            Myclass obj = new Myclass();
            while(!parser.isClosed()) {

            JsonToken jsonToken = parser.nextToken();

            if (JsonToken.FIELD_NAME.equals(jsonToken)) {

                String fieldName = parser.getCurrentName();
                System.out.println(fieldName);
                jsonToken = parser.nextToken();

                switch(fieldName) { 
                -----set the fields of obj
                }
               }
            return obj
          }

这可以一次序列化一个对象,我想创建一个对象列表

试过了

    JavaType mapType = MAPPER.getTypeFactory().constructCollectionType(List.class, Myclass.class);
    List <MyClass> mylist = (List<MyClass>)MAPPER.readValue(jsonString,mapType);

这不起作用并且没有抛出错误,只是在反序列化时卡住了 我们是否需要拆分 json 数组并为每个对象调用反序列化器或修改自定义反序列化器以创建对象列表

【问题讨论】:

    标签: java jackson deserialization json-deserialization


    【解决方案1】:

    嗯,我完全不明白为什么需要自定义反序列化器。

    恕我直言,您可以这样做:

    List <MyClass> mylist = MAPPER.readValue(jsonString, new TypeReference<List<MyClass>>() {});
    

    【讨论】:

    • 因为来自前端的字符串与后端数据库对象不同
    • 啊,那么您显然有两种不同的数据表示形式……一种视图模式和一种数据库模型。将这些关注点分成两个数据类。
    • 如果维护了两个类,那么字符串数组可以反序列化为视图对象,但我希望它是数据库对象
    • 老实说,我真的不明白你在挣扎什么。 :-/
    猜你喜欢
    • 1970-01-01
    • 2011-12-16
    • 2020-05-27
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 2018-07-15
    • 2019-08-10
    • 1970-01-01
    相关资源
    最近更新 更多