C# 使用Gremlin.net字节码从图中提取子图为\“提供错误反序列化程序;修补匠:图形\“;找不到

C# 使用Gremlin.net字节码从图中提取子图为\“提供错误反序列化程序;修补匠:图形\“;找不到,c#,tinkerpop,gremlin-server,azure-cosmosdb-gremlinapi,gremlinnet,C#,Tinkerpop,Gremlin Server,Azure Cosmosdb Gremlinapi,Gremlinnet,我试图使用Gremlin.net字节码语法从图中获取子图,并在从子图中提取/Cap时出错。如果我直接使用查询字符串进行查询,而不是使用fluent API字节码语法进行查询,则可以得到结果 直接在cosmos DB上使用时返回结果的查询字符串: g.V().has('name','Samplevertex').outE().HasLabel("child").subgraph('sg').cap('sg') var result = g

我试图使用Gremlin.net字节码语法从图中获取子图,并在从子图中提取/Cap时出错。如果我直接使用查询字符串进行查询,而不是使用fluent API字节码语法进行查询,则可以得到结果

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

g.V().has('name','Samplevertex').outE().HasLabel("child").subgraph('sg').cap('sg')
var result = g
                    .V()
                    .Has("name", "Samplevertex")
                    .OutE()
                    .HasLabel("child")
                    .Subgraph("sg")
                    .Cap<GraphSON3Reader>("sg")
                    .Next();
C#gremlin.net不起作用的语法是:

g.V().has('name','Samplevertex').outE().HasLabel("child").subgraph('sg').cap('sg')
var result = g
                    .V()
                    .Has("name", "Samplevertex")
                    .OutE()
                    .HasLabel("child")
                    .Subgraph("sg")
                    .Cap<GraphSON3Reader>("sg")
                    .Next();
var结果=g
.V()
.Has(“名称”、“样本顶点”)
.OutE()
.HasLabel(“儿童”)
.子图(“sg”)
.Cap(“sg”)
.Next();
当我使用上面的代码时,它给出了一个错误,表示“tinker:graph”的反序列化程序找不到。 尝试使用不同类型的帽状字符串、自定义模型。但是仍然得到了相同的错误

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

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

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

按照

在字节码中使用的Cap命令中使用了新的类名,并获得了结果

**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 
        }
    }
**以下是代码片段:**
内部类MySubgraph
{
公共静态字符串GraphsonPrefix=“tinker”;
公共静态字符串GraphsonBaseType=“graph”;
公共静态字符串GraphsonType=GraphSONUtil.FormatTypeName(GraphsonPrefix,
GraphsonBaseType);
公共MySubgraph(ICollection顶点、ICollection边)
{
顶点=顶点;
边=边;
}
公共ICollection顶点{get;}
公共ICollection边{get;}
}
内部类mySubgraphThreader:IGraphSONDeserializer
{
公共动态对象化(JToken graphsonObject、GraphSONReader)
{
JToken jVertices=图形对象[“顶点”];
动态顶点=reader.ToObject(GraphSoObject[“顶点]);
//这里的自定义反序列化逻辑
}
}
字节码需要这样使用:

var result = g
                    .V()
                    .Has("name", "Samplevertex")
                    .OutE()
                    .HasLabel("child")
                    .Subgraph("sg")
                    .Cap<MySubgraph>("sg")
                .Next();
var结果=g
.V()
.Has(“名称”、“样本顶点”)
.OutE()
.HasLabel(“儿童”)
.子图(“sg”)
.Cap(“sg”)
.Next();

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

按照

在字节码中使用的Cap命令中使用了新的类名,并获得了结果

**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 
        }
    }
**以下是代码片段:**
内部类MySubgraph
{
公共静态字符串GraphsonPrefix=“tinker”;
公共静态字符串GraphsonBaseType=“graph”;
公共静态字符串GraphsonType=GraphSONUtil.FormatTypeName(GraphsonPrefix,
GraphsonBaseType);
公共MySubgraph(ICollection顶点、ICollection边)
{
顶点=顶点;
边=边;
}
公共ICollection顶点{get;}
公共ICollection边{get;}
}
内部类mySubgraphThreader:IGraphSONDeserializer
{
公共动态对象化(JToken graphsonObject、GraphSONReader)
{
JToken jVertices=图形对象[“顶点”];
动态顶点=reader.ToObject(GraphSoObject[“顶点]);
//这里的自定义反序列化逻辑
}
}
字节码需要这样使用:

var result = g
                    .V()
                    .Has("name", "Samplevertex")
                    .OutE()
                    .HasLabel("child")
                    .Subgraph("sg")
                    .Cap<MySubgraph>("sg")
                .Next();
var结果=g
.V()
.Has(“名称”、“样本顶点”)
.OutE()
.HasLabel(“儿童”)
.子图(“sg”)
.Cap(“sg”)
.Next();