在json反序列化中将对象保持为字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在json反序列化中将对象保持为字符串相关的知识,希望对你有一定的参考价值。
我有一个类,其中包含一些字段和类型字符串的额外数据,用于存储json对象。我希望它不被反序列化,但在寻找一个多小时之后,我发现的唯一一件事就是:
@Expose(deserialize=false)
但它不起作用。
以下是一个例子:
public class Employee implements Serializable
{
private static final long serialVersionUID = 1L;
@Expose
public Long id;
@Expose
public String name;
... some more fields
@SerializedName("extraData")
@Expose(deserialize = false)
public String extraData;
}
然后在我的服务上我做了以下事情:
final GsonBuilder builder = new GsonBuilder();
final Gson gson = builder.create();
Employee emp = gson.fromJson(json, Employee.class);
我从前端收到的对象是:
{
"id":1,
"name": "John Doe",
"extraData": {"someField1":"someValue1","someField2":"someValue2"}
}
我得到这个错误:java.lang.IllegalStateException:期望一个字符串,但在第1行第48列路径为$ .extraData的BEGIN_OBJECT
当我只想将“extraData”作为带有值的字符串
{"someField1":"someValue1","someField2":"someValue2"}
不接受其他解决方案,因为它是我给出的规范。
答案
你应该使用TypeAdapters
,然后在对象创建过程中将TypeAdapter
添加到你的gson构建器中。
https://google.github.io/gson/apidocs/com/google/gson/TypeAdapter.html
另一答案
如果你改变extraData
的类型并没有坏处(假设它是可能的,额外的数据遵循你描述的模式)
public Map<String, String> extraData;
并撰写一个String
。
Jaron F提出的建议可能总体上更好。有关使用类型适配器的信息,请参阅this answer
以上是关于在json反序列化中将对象保持为字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Unity3D 中将类对象转换为 JSON 字符串?
使用休眠 jpa 进行 JSON 序列化和反序列化以在 JSON 响应中将父对象转换为子对象