2015-08-24 67 views
1

只是一個快速的一個,我有得到使用)時間戳值(值集的節點,當我查詢使用獲取時間戳()值使用C#的客戶端

public List<Thing> ListThings() 
    { 
     return client.Cypher 
        .Match("(thing:Thing)") 
        .Return<Thing>("thing").Results.ToList(); 
    } 

我有一個節點類東西叫,看起來像這樣:

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

我們通過創建「東西」的時間提前:

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

我得到當從我的腳本調用時,每個值都與時間戳背離,這有點煩人,有什麼想法?我在Neo4j瀏覽器中使用查詢獲取所有值,所以我想知道我是否真的做錯了什麼?

感謝

回答

0

Tatham是對的,timestamp()返回一個長不能轉換爲DateTimeOffsetDateTime。其中一個問題是自1970年1月1日以來返回的值是毫秒,所以你需要計算一下,不幸的是,JSON.Net無法自動完成。

如果你可以改變你的Thing類,你可以有一個屬性是沒有序列號,而是由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屬性將永遠只能是提供您碼。

0

如果你去的Neo4j控制檯和公正運行RETURN timestamp(),你會看到的結果是一個數字,如1440468541547.不能被反序列化到DateTimeOffset,尤其是因爲沒有偏移零件。您需要在C#中使用不同的類型:可能是long,或者DateTime

0

謝謝你的出色答案,你解決了這個問題,但我使用的是一個稍微被忽視的(在我的方面)解決方案。 由於timestamp()的數據類型很長,我只想從服務中返回。我們有能力使用客戶端內置的Date對象完美地處理這個問題。

這是我的錯誤,我錯誤地認爲時間戳會是DateTime,但後來我得到了一個關於它的錯誤,並建議使用DateTimeOffset,我從來沒有真正考慮過長的選項。

請記住我是從MSSQL的背景和一些東西,雖然容易做到,但採取不同的角度來掌握。

不過感謝你們兩位,非常感謝所需要的時間。