无法使用 C# 客户端反序列化日期时间属性 Neo4j
Posted
技术标签:
【中文标题】无法使用 C# 客户端反序列化日期时间属性 Neo4j【英文标题】:Cannot deserialize datetime property Neo4j using C# client 【发布时间】: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;
【问题讨论】:
您的错误信息中的日期格式是欧洲格式。看看这个问题。它不是重复的,但它可能会有所帮助。 ***.com/questions/21256132/… 【参考方案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
,我还有另一个在另一个项目中引用,重建和更新就可以了!感谢您的领导。以上是关于无法使用 C# 客户端反序列化日期时间属性 Neo4j的主要内容,如果未能解决你的问题,请参考以下文章