简体   繁体   English

使用Neo4j .Net驱动程序的结果

[英]Using results from Neo4j .Net driver

I am struggling to cast the INode results from the native Neo4j .Net driver to my own object. 我正在努力将INode结果从本机Neo4j .Net驱动程序转换为我自己的对象。

public class User
{
    public String UUID { get; set; }
    public String firstname { get; set; }
}

My node as returned in Neo4j desktop browser: 我的节点在Neo4j桌面浏览器中返回:

{
  "UUID": "e0bc991a-1018-4edb-83df-771b8cee4c88",
  "firstname": "John"
}

C# code using Neo4jClient (this works): 使用Neo4jClient的C#代码(可行):

var users = client.Cypher
.Match("(p:Person)")
.Return(p => p.As<User>())
.Results.ToList();

C# code using native Neo4j .Net driver (fails): 使用本机Neo4j .Net驱动程序的C#代码(失败):

var users = new List<User>();
using (var session = _driver.Session())
{
  session.ReadTransaction(tx =>
  {
    var result = tx.Run("MATCH (p:Person) RETURN p").ToList();
    users = result.Select(p => p[0].As<User>()).ToList();
  });
}

My error message is: System.InvalidCastException: Unable to cast object of type Neo4j.Driver.Internal.Node to type sandbox_neotesting.Models.User . 我的错误消息是:System.InvalidCastException:无法将类型Neo4j.Driver.Internal.Node对象Neo4j.Driver.Internal.Node转换为sandbox_neotesting.Models.User

Any pointers on how I can fix this? 关于如何解决此问题的任何指示? I was hoping to find a solution where I could directly cast the result to my internal model, not having to set each property specifically . 我希望找到一种解决方案,可以将结果直接转换为内部模型, 而不必专门设置每个属性

Thanks! 谢谢! :) :)

Very quiet here, but found a working solution. 这里很安静,但是找到了可行的解决方案。 I simply serialize the node's properties, then deserialize into a User object. 我只是简单地序列化节点的属性,然后反序列化为User对象。 Feel free to suggest improvements! 随时提出改进建议!

var statementText = "MATCH (p:Person) RETURN p";

var users = new List<User>();
using (var session = _driver.Session())
{
    session.ReadTransaction(tx =>
    {
        var result = tx.Run(statementText);
        foreach(var record in result)
        {
            var nodeProps = JsonConvert.SerializeObject(record[0].As<INode>().Properties);
            users.Add(JsonConvert.DeserializeObject<User>(nodeProps));
        }
    });
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM