2014-09-14 2 views
0

Я использую Neo4jClient использовать Neo4j, я использую Cypher код для CRUD лица, Следуйте Код:сериализации/десериализации Json DateTime в Neo4jClient

_graphClient.Cypher.Merge("(n:Movie { Id:101 })") 
      .Set("n.Key = 55,n.DateTime='" +DateTime.UtcNow.ToString()+"'").ExecuteWithoutResults(); 

_graphClient.Cypher 
      .Match("(n:Movie)-[r:RelName]-(m:Movie)") 
      .Where((EntityNode n) => n.Id == 20) 
      .Return....... 

public class EntityNode 
{ 
    public int Id { get; set; } 
    public string Key { get; set; } 
    public DateTime DateTime { get; set; } 
} 

ОШИБКА: Neo4j возвратил правильный ответ, однако Neo4jClient не удалось десериализуем в структуру объекта, которую вы поставили. Не десериализуйте DateTime.

С другой стороны, я использую jsonconvertor в различными способами, например:

_graphClient.Cypher.Merge("(n:Movie { Id:101 })") 
       .Set("n.Key = 55,n.DateTime=" +JsonConvert.SerializeObject(DateTime.UtcNow)).ExecuteWithoutResults(); 

Я до сих пор ERROR

ответ

1

Передайте его в качестве надлежащего параметра:

graphClient.Cypher 
    .Merge("(n:Movie { Id:101 })") 
    .Set("n.Key = {key}, n.DateTime = {time}") 
    .WithParams(new { 
     key = 55, 
     time = DateTimeOffset.UtcNow 
    }) 
    .ExecuteWithoutResults(); 

Таким образом, Neo4jClient будет делать сериализация для вас, и вы не вводите много проблем безопасности и производительности.

Это в DOCO здесь: https://github.com/Readify/Neo4jClient/wiki/cypher#parameters

+0

Если я использую строку вместо datetime! Working! но не может сериализовать класс для datetime! у меня ошибка –

0

я столкнулся с таким же вопросом недавно его из-за даты значения времени приходя от нео.

Я сохранил дату в нео в качестве эпохи, но при извлечении я использовал длинный класс. из-за этого он дал мне вышеупомянутую ошибку.

Попробуйте использовать строку для указанного времени.

Надеюсь, это вам поможет.

Смежные вопросы