0
我在嘗試使用 java json library, jackson來序列化由jnativehook捕獲的keyevent。爲什麼jackson無法序列化jnativehook NativeKeyEvent?
我按照這個指令Can't get a basic Jackson Mixin to work來序列化第三方類。
然而,它失敗,以下情況除外:
The class of event object is : org.jnativehook.keyboard.NativeKeyEvent
com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class org.jnativehook.GlobalScreen and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)) (through reference chain: org.jnativehook.keyboard.NativeKeyEvent["source"])
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:59)
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:26)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:569)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:597)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:142)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:118)
at com.fasterxml.jackson.databind.ObjectWriter._configAndWriteValue(ObjectWriter.java:681)
at com.fasterxml.jackson.databind.ObjectWriter.writeValueAsString(ObjectWriter.java:567)
at GlobalKeyListenerExample.nativeKeyReleased(GlobalKeyListenerExample.java:45)
at org.jnativehook.GlobalScreen.processKeyEvent(Unknown Source)
at org.jnativehook.GlobalScreen$1.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
的來源和jar文件鏈接在此gist可用。
我試圖看看傑克遜在調試器中序列化的元素是什麼。我看到「源」屬性,我沒有在jnativehook庫中看到。這是jackson無法序列化的元素。我認爲這個元素是在運行時添加的,但不知道爲什麼以及何時。
傑克遜有什麼方法可以指示它不序列化這個字段或者只序列化幾個選擇屬性嗎?
它確實有效。但正如您正確指出的那樣,我不想成爲JSON的一部分,所以還有一個額外的場源。我嘗試尋找客戶序列化器/反序列化器的一個很好的例子,但無法弄清楚,如何編寫序列化器/反序列器,它可以支持對象中的多個字段。如果你能引導我如何去做,我將不勝感激。 –