Gremlin.Net System.InvalidOperationException:'deserializer for“janusgraph:RelationIdentifier”not found'exception

时间:2018-01-13 11:06:20

标签: c# gremlin janusgraph gremlin-server

我是janusgraph和tinkerpop的新手。我正在使用Gremlin.Net 3.2.7连接到janusgraph,所有返回顶点的请求对我来说都很好,但是当我运行任何返回边缘的操作时,如“gV(61464).outE('father')。 toList()“库中的异常:

  

System.InvalidOperationException:'反序列化器   “janusgraph:RelationIdentifier”未找到“

服务器没有抛出任何异常,序列化配置是默认配置:

串行器:

 - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
 - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: {ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
 - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}
 - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0] }}
 - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
 - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0] }}

但它在gremlin-client控制台中运行良好。你有什么建议吗?

1 个答案:

答案 0 :(得分:3)

看起来JanusGraph将自己格式的边缘序列化为RelationIdentifiers,它们不是TinkerPop的一部分。所以Gremlin.Net没有这种类型的解串器。这意味着您必须为此类型实现自己的GraphSON反序列化器,或者将Gremlin查询更改为不直接返回边缘。

TinkerPop文档包含example on how to write a deserializer for Gremlin.Net。 (请注意,您只需要实现IGraphSONDeserializer,而不是IGraphSONSerializer,因为它仅用于写作。)

或者,如果您想要更改Gremlin遍历,那么只需返回边缘属性即可:

g.V(61464).OutE("father").ValueMap<object>().ToList();

BTW:看起来你正在以Gremlin-Groovy字符串的形式将你的Gremlin遍历发送到JanusGraph服务器。您也可以写Gremlin traversals directly in C# with Gremlin.Net。这使得编写遍历变得更容易,但是在服务器端执行也更有效。