我有一个类,其中包含一些字段和类型字符串的额外数据,用于存储json对象。我希望它不被反序列化,但在寻找一个多小时后,我发现的唯一的事情是:
menu = self.driver.find_element_by_id("active_config")
ActionChains(self.driver).move_to_element(menu).click(menu).perform()
if curr_config_loc < new_config_loc:
for x in xrange(0, new_config_loc - curr_config_loc):
ActionChains(self.driver).key_down(Keys.ARROW_DOWN).perform()
elif curr_config_loc > new_config_loc:
for x in xrange(0, curr_config_loc - new_config_loc):
ActionChains(self.driver).key_down(Keys.ARROW_UP).perform()
ActionChains(self.driver).key_down(Keys.ENTER).perform()
但它不起作用。
以下是一个例子:
@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);
我收到此错误: java.lang.IllegalStateException:期望一个字符串但在第1行第48列路径为$ .extraData
的BEGIN_OBJECT当我只想将“extraData”作为带有值
的字符串时{
"id":1,
"name": "John Doe",
"extraData": {"someField1":"someValue1","someField2":"someValue2"}
}
不接受其他解决方案,因为这是我给出的规范。
答案 0 :(得分:1)
如果您更改extraData
的类型(假设可能并且额外数据遵循您描述的模式),则不会造成伤害
public Map<String, String> extraData;
并撰写String
。
Jaron F提出的建议可能总体上更好。有关使用类型适配器的信息,请参阅this answer
答案 1 :(得分:0)
您应该使用TypeAdapters
,然后在对象创建过程中将TypeAdapter
添加到您的gson构建器中。
https://google.github.io/gson/apidocs/com/google/gson/TypeAdapter.html