使用 Gremlin.net 字节码从图中提取子图给出错误反序列化器 for \"tinker:graph\" not found

Extract subgraph from a graph using Gremlin.net byte code gives error deserializer for \"tinker:graph\" not found

我正在尝试使用 Gremlin.net 字节码语法从图中获取子图,但在从子图中获取 extracting/Cap 时出现错误。如果我直接使用查询字符串查询而不是使用流畅的 API 字节代码语法,我能够得到结果。

直接在 cosmos DB 上使用时 returns 结果的查询字符串:

g.V().has('name','Samplevertex').outE().HasLabel("child").subgraph('sg').cap('sg')

C# gremlin.net 无效的语法是:

var result = g
                    .V()
                    .Has("name", "Samplevertex")
                    .OutE()
                    .HasLabel("child")
                    .Subgraph("sg")
                    .Cap<GraphSON3Reader>("sg")
                    .Next();

当我使用上面的代码时,它给出了一个错误,提示未找到“tinker:graph”的反序列化器。 尝试使用 Cap<> 中的不同类型,如字符串、自定义模型。但是仍然出现相同的错误。

想知道我是否遗漏了 Gremlin 服务器配置端的任何内容,或者是否存在默认情况下带上限的子图不适用于 gremlin.net 的已知问题?

我的 gremlin 服务器 yaml 中有以下设置:

我能够通过创建自己的自定义反序列化器来解决这个问题,因为我了解到我们目前没有其他选项用于返回 Graph 的查询。

已按照 http://tinkerpop.apache.org/docs/3.2.6/reference/#_custom_serialization_2

中的步骤操作

在字节码中使用的 Cap<> 命令中使用了新的 class 名称并得到了结果。

**Following is the snippet:**
internal class MySubgraph
    {
        public static string GraphsonPrefix = "tinker";
        public static string GraphsonBaseType = "graph";
        public static string GraphsonType = GraphSONUtil.FormatTypeName(GraphsonPrefix, 
    GraphsonBaseType);

        public MySubgraph(ICollection<IVertex> vertices, ICollection<IEdge> edges)
        {
            Vertices = vertices;
            Edges = edges;
        }

        public ICollection<IVertex> Vertices { get; }
        public ICollection<IEdge> Edges { get; }
}



    internal class MySubgraphReader : IGraphSONDeserializer
    {
        public dynamic Objectify(JToken graphsonObject, GraphSONReader reader)
        {
            JToken jVertices = graphsonObject["vertices"];
            dynamic vertices = reader.ToObject(graphsonObject["vertices"]);

            // Custom deserialization logic here 
        }
    }

字节码需要这样使用:

var result = g
                    .V()
                    .Has("name", "Samplevertex")
                    .OutE()
                    .HasLabel("child")
                    .Subgraph("sg")
                    .Cap<MySubgraph>("sg")
                .Next();