解析Gremlin.Net响应的最佳方法是什么?

时间:2018-03-30 18:38:37

标签: azure-cosmosdb gremlin

Gremlin.Net回复中获取POCO的最佳方式是什么?

现在我手动转换为词典:

var results = await gremlinClient.SubmitAsync<Dictionary<string, object>>("g.V()");
var result = results[0];
var properties = (Dictionary<string, object>)result["properties"];
var value = ((Dictionary<string, object>)properties["myValue"].Single())["value"];

4 个答案:

答案 0 :(得分:2)

我发现GremlinClient只能返回动态对象,如果你把其他东西作为类型,它就会失败(除非我做错了)。

我最终做的是将动态对象序列化为JSON,然后将其反序列化为我想要的对象类型:

var results = await gremlinClient.SubmitAsync<dynamic>("g.V()");
JsonConvert.DeserializeObject<MyResult>(JsonConvert.SerializeObject(results));

动态对象只是一个字典,但是如果你先将它序列化,那么它就具有适当的字段/属性层次结构,然后可以反序列化为你实际期望的结果。

看起来有点痛苦,不得不做额外的转换,但只有这样才能让它发挥作用。

答案 1 :(得分:0)

查看以下扩展以及如何解析结果

var resultCollection = await gremlinClient.SubmitAsync<T>(requestScript, bindings).ConfigureAwait(false);
            return resultCollection.FirstOrDefault();

<强> CODE

答案 2 :(得分:0)

您可以使用类似于以下的MyClass来获取属性

ionic serve

并在其中使用

    class ProviderProperties {
        public object Name { get; set; }
        public object contact { get; set; }
        public object requesttype { get; set; }
        public object address { get; set; }
        public object phone { get; set; }
        public object description { get; set; }
        public object otherState { get; set; }
        public object otherCity { get; set; }
        public object addressStreet { get; set; }
    }

    class MyClass {
        public string id { get; set; }
        public string label { get; set; }
        public string type { get; set; }
        public ProviderProperties properties { get; set; }
    }

答案 3 :(得分:0)

尝试这种方法

IGremlinClient janusClient = JanusGraphClientBuilder.BuildClientForServer(new  GremlinServer("localhost", 8182)).Create();
GraphTraversalSource g = Traversal().WithRemote(new DriverRemoteConnection(janusClient));

IList<Vertex> x =  g.V().HasLabel("YourLabel").Has("YourpPopertyName", "some value").ToList();