使用 C# 客户端获取 timestamp() 值

Getting timestamp() value using C# client

只是一个快速的,当我使用

查询节点时,我有一个节点使用 timestamp() 的值获取一个值集
public List<Thing> ListThings()
    {
        return client.Cypher
                     .Match("(thing:Thing)")
                     .Return<Thing>("thing").Results.ToList();
    }

我有一个 class 看起来像这样的东西:

public class Thing{
    public string name {get; set;}
    public int id {get;set;}
    public DateTimeOffset timestamp{get;set}
}

我们使用以下方法提前创建 'thing':

Create(thing:Thing{id:6,name:'thing1', timestamp:timestamp()}) return thing

从我的脚本调用时,我得到了除时间戳之外的所有值,这有点烦人,有什么想法吗?我在 Neo4j 浏览器中使用查询返回了所有值,所以我想知道我是否真的做错了什么?

谢谢

如果你去 Neo4j 控制台,只是 运行 RETURN timestamp(),你会看到结果是一个像 1440468541547 这样的数字。它不能被反序列化为 DateTimeOffset,特别是因为没有偏移分量。您需要在 C# 中使用不同的类型:可能是 long,或者可能是 DateTime.

Tatham 是对的,timestamp() returns 不能转换为 DateTimeOffsetDateTime 的多头。问题之一是返回值是自 1970 年 1 月 1 日以来的毫秒数,因此您需要计算,不幸的是,JSON.Net 无法自动执行此操作。

如果你可以改变你的 Thing class 你可以有一个 属性 没有序列化但由 Timestamp 属性,像这样:

public class Thing
{
    private static DateTime _epoch = new DateTime(1970, 1, 1);
    public string id { get; set; }
    public string name { get; set; }

    private long _ts;

    public long timestamp
    {
        get { return _ts; }
        set
        {
            _ts = value;
            TimestampAsDateTime = _epoch.AddMilliseconds(_ts);
        }
    }

    [JsonIgnore]
    public DateTime TimestampAsDateTime { get; set; }
}

TimestampAsDateTime 属性 只会在您的代码中可用。

感谢您的出色回答,您解决了问题,但我使用的是一个(对我而言)略微被忽视的解决方案。 由于 timestamp() 的数据类型很长,我将 return 来自服务。我们有能力使用客户端内置的 Date 对象完美地处理这个问题。

这是我的一个错误,我错误地认为时间戳应该是 DateTime,但后来我得到了一个关于它的错误并且被建议使用 DateTimeOffset,我确实这样做了,从来没有真正考虑过 long 作为一个选项。

请记住我是MSSQL出身,有些东西虽然容易做,但换个角度去把握。

谢谢你们,感谢您花时间提供帮助。