[英]Converting object (inclusive lambda) to JSON and vice versa
我正在使用protostuff將自己的類的對象轉換為JSON,反之亦然。 有Java 8和lambdas。 轉換為JSON文件,例如:
LinkedBuffer buffer = LinkedBuffer.allocate(2048);
Schema schema = RuntimeSchema.getSchema(obj.getClass());
boolean numeric = false;
byte[] json = JsonIOUtil.toByteArray(obj, schema, numeric, buffer);
Files.write(file, json);
從JSON轉換為obj:
Schema<MyClass> schema = RuntimeSchema.getSchema(MyClass.class);
Path path = Paths.get("path");
byte[] as = Files.readAllBytes(path);
MyClass mc = schema.newMessage();
JsonIOUtil.mergeFrom(as, mc, schema, false);
當我嘗試將JSON轉換為obj時,有一個例外:
線程“主”中的異常java.lang.RuntimeException:java.lang.ClassNotFoundException:com.test.Blabla $$ Lambda $ 4/1699679644
我認為lambda是一個問題。 我可以用它轉換類嗎?
對象已歸檔:
private final Function<,> name;
您的lambda是運行時表達式,無法序列化。 實際上,它是一個方法指針,在您運行的序列化代碼中有效。 接收代碼(反序列化)對這樣的方法指針(指向發送代碼中的方法)有什么作用?
如果您的發送代碼與接收代碼相同,並且lambda表達式的可能值是一組定義明確的不同方法,則應考慮實現一個枚舉並僅序列化該枚舉值:
public enum Lambdas
{
FIRST( s -> new String()),
SECOND( s -> s + " ");
private Function<String, String> myLambda;
private Lambdas( Function<String, String> aLambda )
{
myLambda = aLambda;
}
public Function<String, String> getLambda()
{
return myLambda;
}
}
如果您的人員現在有成員
private Lambdas myLambda;
(可序列化)您的接收代碼可以像這樣使用它:
String result = myLambda.getLambda().apply();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.