我是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控制台中运行良好。你有什么建议吗?
答案 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。这使得编写遍历变得更容易,但是在服务器端执行也更有效。