无法使用 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的主要内容,如果未能解决你的问题,请参考以下文章

C#从xml反序列化日期时间

“无法解析的日期:1302828677828”试图用 Gson 反序列化从服务器接收到的毫秒格式日期

无法将 JSON 字符串反序列化为 C# 对象

将json的日期属性反序列化为LocalDate

C# 无法反序列化这个 json

如何反序列化 C# 中只有属性的 xml 元素?