message Example {
enum State {
Deleted = 1;
Inactive = 2;
Active = 4;
}
optional uint64 id = 1 [(gson_name) = "id"];
optional uint64 state = 2 [(gson_name) = "state"];
optional uint64 userId = 3 [(gson_name) = "uui"];
optional sint32 marketId = 4 [(gson_name) = "m"];
optional uint64 productId = 5 [(gson_name) = "p"];
}
Json StringWie konvertiere ich JSON-String zu Protobuf-Nachrichtenobjekt?
v: String = {"m": 97, "state": 1, "uui": 1, "id": 1, "p": 1}
Anruf mit JSON zu konvertieren, die fehlschlägt.
gson.fromJson(v, classOf[Example])
Exception java.lang.NullPointerException
Ich bin nicht sicher, ob dies json generierte Proto Klasse der Umwandlung ein richtiger Weg ist. Könnte mir bitte jemand sagen, was ich falsch mache oder vielleicht eine andere Methode vorschlage, um das zu erreichen? Ich bin auf Protobuf Version 2.6 und kann nicht wirklich bis zu 3 für dieses Projekt bewegen.
Danke, aber ich hatte gehofft, json in Objekt der Java-Klasse für meine protobuf Nachricht erzeugt deserialisiert zu erhalten. Ich würde wahrscheinlich die JSON-Bibliothek von Spray anstelle von Gson verwenden, wenn ich sowieso zur Zwischendarstellung konvertieren müsste. – user2903819
Es ist nicht ratsam, die generierte Proto-Java-Klasse zu ändern, um Anmerkungen hinzuzufügen, um verschiedene Attributnamen zu erwähnen. Also, analysierte den JSON unter Verwendung von Attributnamen und ordnete ihn der PROTO-Java-Klasse zu. – notionquest