【问题标题】:Unable to deserializer and serialize Java List<> with jackson无法使用 jackson 反序列化和序列化 Java List<>
【发布时间】:2015-10-02 19:34:10
【问题描述】:

我正在尝试反序列化,然后序列化一个 java 对象。 我有一个像这样的对象-

public class Blas{
private Integer blasRootId;

private List<Bla> blaList = new ArrayList<>();

public Blas() {}

/region g & s
getter and setters ..
//endregion
}

还有对象——

public class Bla{
private String fileName;
private String description;
private Integer id;

public Bla() {}

//region g & s
getter and setters ..
//endregion
}

我用

反序列化对象
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);

String jsonString = mapper.writeValueAsString(Blas);

而创建的json就像

{
"Blas": {
    "blasRootId": 2840,
    "blaList": [
      "java.util.ArrayList",
      [
        {
          "fileName": "RegularPayload",
          "description": "",
          "id": 2260
        }
      ]
    ]
  }
}

所以当我尝试序列化创建的 json 时,会出现以下错误 -

Can not instantiate value of type [simple type, class Bla] from String value        ('java.util.ArrayList'); no single-String constructor/factory method

我可以让反序列化器按原样编写列表,而不添加“java.util.ArrayList”列表,或者我怎样才能正确读取它?

更新: 这是我的错误,我在“mapper.configure”中添加了一个参数(我不记得是哪个)导致序列化程序添加“java.util.ArrayList”。 我的代码示例应该可以正常工作。

【问题讨论】:

  • 顺便说一句:创建JSON的过程称为序列化,重新读取它是反序列化,而不是相反。
  • 请提供创建 Blas 对象的代码。我正在尝试重现,但有我的输出: {"blasRootId":8,"blaList":[{"fileName":"name","description":"desc","id":1}]}

标签: java json serialization arraylist jackson


【解决方案1】:

正如 prsmax 所问的,这取决于您尝试反序列化 blas 的代码是什么样的,您似乎正在尝试获取 blas 字符串并像这样反序列化:

mapper.readValue(blasStr, Bla.class)

如果您只想反序列化 Bla 列表,您可以这样做:

    JavaType javaType = mapper.getTypeFactory().constructCollectionType(ArrayList.class, ValueType.class);
    List<ValueType> list = mapper.readValue(str, javaType);

如果您确实需要包装器对象 Blas,那么您应该有一个标有 @JsonCreator 的构造函数接受标有 @JsonProperty 的 List&lt;Bla&gt;(还有其他方法,但这是一种故障安全方法,并使代码可读)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2023-03-04
    • 2016-04-25
    • 2016-12-11
    • 1970-01-01
    • 2013-09-23
    相关资源
    最近更新 更多