![](/img/trans.png)
[英]How to create 2 `this` reference in javascript from within a function
[英]How to create javascript function within json by Gson?
是否可以通過 Gson 像這樣創建 json? 沒有鑰匙的javascript function在json里面。
{
autosave: {
save( editor ) {
return editor.saveData( editor.id, editor.getData() );
},
waitingTime: 2000
}
提前致謝。
最后,我找到了一種使用 TypeAdapterFactory 來完成它的方法。 這是代碼。
class AutosaveAdapter implements TypeAdapterFactory {
@Override
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> tokenType) {
final TypeAdapter<T> adapter = gson.getDelegateAdapter(this, tokenType);
return new TypeAdapter<T>() {
@Override
public T read(JsonReader reader) throws IOException {
return adapter.read(reader);
}
@Override
public void write(JsonWriter writer, T value) throws IOException {
JsonElement tree = adapter.toJsonTree(value);
if (value instanceof Autosave) {
String dom = value.toString();
JsonObject jo = (JsonObject) tree;
jo.addProperty("autosave", dom );
}
gson.getAdapter(JsonElement.class).write(writer, tree);
}
};
}
}
和
class Autosave {
int waitingTime;
@Expose(serialize = false, deserialize = false)
String name;
@Expose(serialize = false, deserialize = false)
String arguments;
@Expose(serialize = false, deserialize = false)
String body;
Autosave(int waitingTime, String name, String arguments, String body) {
this.waitingTime = waitingTime;
this.name = name;
this.arguments = arguments;
this.body = body;
}
public String toString() {
return "{ waitingTime:" + waitingTime + "," +
name +" ( "+arguments+" ) { " + body + " } "+
"}";
}
}
去測試:
public static void main(String... args) {
Autosave autosave = new Autosave(2000, "save", "editor", "return editor.saveData( editor.id, editor.getData() );");
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setLenient();
Gson gson = gsonBuilder
.excludeFieldsWithoutExposeAnnotation()
.registerTypeAdapterFactory(new AutosaveAdapter())
.create();
System.out.println(gson.toJson(autosave));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.