在Neo4jClient中序列化/反序列化Json DateTime

时间:2014-09-14 07:29:19

标签: c# .net json serialization neo4jclient

我使用Neo4jClient来使用Neo4j,我使用cypher代码为CRUD实体,遵循代码:

_graphClient.Cypher.Merge("(n:Movie { Id:101 })")
            .Set("n.Key = 55,n.DateTime='" +DateTime.UtcNow.ToString()+"'").ExecuteWithoutResults();

_graphClient.Cypher
            .Match("(n:Movie)-[r:RelName]-(m:Movie)")
            .Where((EntityNode n) => n.Id == 20)
            .Return.......

public class EntityNode
{
    public int Id { get; set; }
    public string Key { get; set; }
    public DateTime DateTime { get; set; }
}
  

错误:Neo4j返回了有效的响应,但是Neo4jClient无法反序列化为您提供的对象结构。无法反序列化 DateTime

另一方面,我以不同的方式使用jsonconvertor ,例如:

   _graphClient.Cypher.Merge("(n:Movie { Id:101 })")
                .Set("n.Key = 55,n.DateTime=" +JsonConvert.SerializeObject(DateTime.UtcNow)).ExecuteWithoutResults();

我仍然有错误

2 个答案:

答案 0 :(得分:1)

将其作为正确的参数传递:

graphClient.Cypher
    .Merge("(n:Movie { Id:101 })")
    .Set("n.Key = {key}, n.DateTime = {time}")
    .WithParams(new {
        key = 55,
        time = DateTimeOffset.UtcNow
    })
    .ExecuteWithoutResults();

这样,Neo4jClient将为您进行序列化,并且不会引入大量安全性和性能问题。

这是在doco:https://github.com/Readify/Neo4jClient/wiki/cypher#parameters

答案 1 :(得分:0)

我最近遇到了同样的问题,因为日期时间值来自neo。

我已将日期时间存储在neo中作为纪元时间,但在检索时我在课堂上使用了很长时间。因为这给了我上面的错误。

尝试使用字符串表示上述日期时间。

希望这会对你有所帮助。