【问题标题】:Cannot deserialize datetime property Neo4j using C# client无法使用 C# 客户端反序列化日期时间属性 Neo4j
【发布时间】:2015-10-29 19:38:01
【问题描述】:

我正在尝试使用 C# 客户端从 Neo4j 中获取强类型对象。在我添加 DateTime 属性之前,这一切都有效。

我已经成功地将数据插入到 Neo4j 数据库中,我可以使用控制台查看它。我也可以查询数据,但是我无法返回任何强类型对象,因为反序列化似乎失败了。

我正在使用参数插入数据:

_graphClient.Cypher
.WithParams(new
{
    id = node.Id,
    createdAt = node.CreatedAt,
    lastModified = node.LastModified              
})
.Create("(c { " +
    "Id: {id}, " +
    "CreatedAt: {createdAt}, " +
    "LastModified: {lastModified} } )")

我获取数据的查询非常基本:

nodes = _graphClient.Cypher
.Match("(n)")
.Return((n) => n.As<NeoObject>()).Results.ToList();

然后我收到一个错误...

日志文件说明如下:

参数名称:内容---> Newtonsoft.Json.JsonReaderException:无法将字符串转换为日期时间:17-9-2015 21:57:14 +00:00。路径“a”,第 1 行,位置 32。

数据看起来像这样(来自日志的条目):

"data" : {
  "Id" : 31,
  "LastModified" : "2015-09-17T21:57:14Z",
  "CreatedAt" : "2015-09-17T21:57:14Z",
}

我的 c# 类型定义:

public class NeoObject
{
    public int Id { get; set; }
    public DateTime CreatedAt { get; set; }
    public DateTime LastModified { get; set; }
}

public class NeoObject2
{
    public int Id { get; set; }
    public DateTime? CreatedAt { get; set; }
    public DateTime? LastModified { get; set; }
}

【问题讨论】:

标签: c# datetime neo4j deserialization neo4jclient


【解决方案1】:

如果我没记错的话,您需要使用 DateTimeOffset 类型作为您的属性。

public class NeoObject
{
    public int Id { get; set; }
    public DateTimeOffset CreatedAt { get; set; }
    public DateTimeOffset LastModified { get; set; }
}

编辑 这曾经是这种情况,但最近的更新似乎增加了对 DateTime 对象类型的支持。你用的是什么版本的 Neo4jClient?你试过 DateTimeOffset 吗?

【讨论】:

  • 太棒了。我的编辑所指的更改可以在github.com/Readify/Neo4jClient/pull/100/files 的拉取请求中看到。想知道您使用的客户端版本是否意味着允许 DateTime。我相信@ChrisSkardon 会感兴趣的。
  • 我尝试更新到最新版本 (1.1.0.11) 但仍然不允许我使用 DateTime 对象... - 编辑:它确实适用于 DateTime,我还有另一个在另一个项目中引用,重建和更新就可以了!感谢您的领导。
猜你喜欢
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 2010-09-10
  • 2015-07-21
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多