2015-05-21 32 views
0

我正在使用Neo4J 2.2.2版本。從Neo4J反序列化Json 2.2.2

當Neo4jClient嘗試反序列化JSON如下(模式投影),我們收到以下消息:

的Neo4j返回一個有效的響應,但是Neo4jClient無法反序列化爲您提供的對象結構。 首先,請嘗試查看下面的例外情況以確定發生了什麼。 包含此異常的全文,包括此消息,堆棧跟蹤以及所有內部異常詳細信息。 包含VB $ AnonymousType_0`2 [[Person,App_Code.tynn6afz,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null],[Movie,App_Code.tynn6afz,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null]]。

包含此生JSON,與任何敏感值替換非敏感當量:

{ 
    "columns": [ 
     "person", 
     "movie" 
    ], 
    "data": [ 
     [ 
      { 
       "outgoing_relationships": "http://sjkdv37:7474/db/data/node/324/relationships/out", 
       "labels": "http://sjkdv37:7474/db/data/node/324/labels", 
       "data": { 
        "born": 1956, 
        "name": "Tom Hanks" 
       }, 
       "all_typed_relationships": "http://sjkdv37:7474/db/data/node/324/relationships/all/{-list|&|types}", 
       "traverse": "http://sjkdv37:7474/db/data/node/324/traverse/{returnType}", 
       "self": "http://sjkdv37:7474/db/data/node/324", 
       "property": "http://sjkdv37:7474/db/data/node/324/properties/{key}", 
       "properties": "http://sjkdv37:7474/db/data/node/324/properties", 
       "outgoing_typed_relationships": "http://sjkdv37:7474/db/data/node/324/relationships/out/{-list|&|types}", 
       "incoming_relationships": "http://sjkdv37:7474/db/data/node/324/relationships/in", 
       "extensions": {}, 
       "create_relationship": "http://sjkdv37:7474/db/data/node/324/relationships", 
       "paged_traverse": "http://sjkdv37:7474/db/data/node/324/paged/traverse/{returnType}{?pageSize,leaseTime}", 
       "all_relationships": "http://sjkdv37:7474/db/data/node/324/relationships/all", 
       "incoming_typed_relationships": "http://sjkdv37:7474/db/data/node/324/relationships/in/{-list|&|types}", 
       "metadata": { 
        "id": 324, 
        "labels": [ 
         "Person" 
        ] 
       } 
      }, 
      { 
       "outgoing_relationships": "http://sjkdv37:7474/db/data/node/364/relationships/out", 
       "labels": "http://sjkdv37:7474/db/data/node/364/labels", 
       "data": { 
        "released": 2006, 
        "title": "The Da Vinci Code", 
        "tagline": "Break The Codes" 
       }, 
       "all_typed_relationships": "http://sjkdv37:7474/db/data/node/364/relationships/all/{-list|&|types}", 
       "traverse": "http://sjkdv37:7474/db/data/node/364/traverse/{returnType}", 
       "self": "http://sjkdv37:7474/db/data/node/364", 
       "property": "http://sjkdv37:7474/db/data/node/364/properties/{key}", 
       "properties": "http://sjkdv37:7474/db/data/node/364/properties", 
       "outgoing_typed_relationships": "http://sjkdv37:7474/db/data/node/364/relationships/out/{-list|&|types}", 
       "incoming_relationships": "http://sjkdv37:7474/db/data/node/364/relationships/in", 
       "extensions": {}, 
       "create_relationship": "http://sjkdv37:7474/db/data/node/364/relationships", 
       "paged_traverse": "http://sjkdv37:7474/db/data/node/364/paged/traverse/{returnType}{?pageSize,leaseTime}", 
       "all_relationships": "http://sjkdv37:7474/db/data/node/364/relationships/all", 
       "incoming_typed_relationships": "http://sjkdv37:7474/db/data/node/364/relationships/in/{-list|&|types}", 
       "metadata": { 
        "id": 364, 
        "labels": [ 
         "Movie" 
        ] 
       } 
      } 
     ], 
     [ 
      { 
       "outgoing_relationships": "http://sjkdv37:7474/db/data/node/324/relationships/out", 
       "labels": "http://sjkdv37:7474/db/data/node/324/labels", 
       "data": { 
        "born": 1956, 
        "name": "Tom Hanks" 
       }, 
       "all_typed_relationships": "http://sjkdv37:7474/db/data/node/324/relationships/all/{-list|&|types}", 
       "traverse": "http://sjkdv37:7474/db/data/node/324/traverse/{returnType}", 
       "self": "http://sjkdv37:7474/db/data/node/324", 
       "property": "http://sjkdv37:7474/db/data/node/324/properties/{key}", 
       "properties": "http://sjkdv37:7474/db/data/node/324/properties", 
       "outgoing_typed_relationships": "http://sjkdv37:7474/db/data/node/324/relationships/out/{-list|&|types}", 
       "incoming_relationships": "http://sjkdv37:7474/db/data/node/324/relationships/in", 
       "extensions": {}, 
       "create_relationship": "http://sjkdv37:7474/db/data/node/324/relationships", 
       "paged_traverse": "http://sjkdv37:7474/db/data/node/324/paged/traverse/{returnType}{?pageSize,leaseTime}", 
       "all_relationships": "http://sjkdv37:7474/db/data/node/324/relationships/all", 
       "incoming_typed_relationships": "http://sjkdv37:7474/db/data/node/324/relationships/in/{-list|&|types}", 
       "metadata": { 
        "id": 324, 
        "labels": [ 
         "Person" 
        ] 
       } 
      }, 
      { 
       "outgoing_relationships": "http://sjkdv37:7474/db/data/node/414/relationships/out", 
       "labels": "http://sjkdv37:7474/db/data/node/414/labels", 
       "data": { 
        "released": 2004, 
        "title": "The Polar Express", 
        "tagline": "This Holiday Season… Believe" 
       }, 
       "all_typed_relationships": "http://sjkdv37:7474/db/data/node/414/relationships/all/{-list|&|types}", 
       "traverse": "http://sjkdv37:7474/db/data/node/414/traverse/{returnType}", 
       "self": "http://sjkdv37:7474/db/data/node/414", 
       "property": "http://sjkdv37:7474/db/data/node/414/properties/{key}", 
       "properties": "http://sjkdv37:7474/db/data/node/414/properties", 
       "outgoing_typed_relationships": "http://sjkdv37:7474/db/data/node/414/relationships/out/{-list|&|types}", 
       "incoming_relationships": "http://sjkdv37:7474/db/data/node/414/relationships/in", 
       "extensions": {}, 
       "create_relationship": "http://sjkdv37:7474/db/data/node/414/relationships", 
       "paged_traverse": "http://sjkdv37:7474/db/data/node/414/paged/traverse/{returnType}{?pageSize,leaseTime}", 
       "all_relationships": "http://sjkdv37:7474/db/data/node/414/relationships/all", 
       "incoming_typed_relationships": "http://sjkdv37:7474/db/data/node/414/relationships/in/{-list|&|types}", 
       "metadata": { 
        "id": 414, 
        "labels": [ 
         "Movie" 
        ] 
       } 
      } 
     ] 
    ] 
} 

編輯

我包括VB代碼,但是我覺得這錯誤是由Neo4jClient生成的。

也許錯誤是圍繞ParseInProjectionMode功能在CypherJsonDeserializer.cs

Dim user As String = "neo4j" 
Dim pwd As String = "password" 
Dim server As String = "localhost:7474" 
Dim link As String = "http://{0}:{1}@{2}/db/data" 
Dim url As New Uri(String.Format(link, user, pwd, server)) 

Dim client As New GraphClient(url) 
client.Connect() 

Dim query = client.Cypher _ 
    .Match("(p:Person {name: ""Tom Hanks""})-[:ACTED_IN]->(m:Movie)") _ 
    .Return(Function(p, m) New With { 
       .person = p.As(Of Person)(), _ 
       .movie = m.As(Of Movie)() 
      }) 

'Here the client threw an Exception 

For Each item In query.Results 
    Dim temp As String = String.Format("{0} - {1}<br>", item.movie.title, item.movie.released) 
    divOut.InnerHtml += temp 
Next 

在額外的,我創建了論文類。

Public Class Movie 
    Public Property title As String 
    Public Property released As Integer 
    Public Property tagline As String 
End Class 

Public Class Person 
    Public Property name As String 
    Public Property born As Integer 
End Class 
+0

你可以顯示你的C#/ VB代碼 - 你想要反序列化什麼類? –

回答

1

錯誤來自匿名類型所產生你創建,現在,我不會假裝知道爲什麼,而不需要花費一定的時間通過Neo4jClient代碼庫挖 - 這將會是很難找出究竟。

可以解決這個問題通過具體的類此示例工作和數據推出到屏幕上(我想指出,我沒有 VB編碼器,所以原諒愚蠢的錯誤):

Module Module1 
    Private Class Together 
     Public Property Person As Person 
     Public Property Movie As Movie 
    End Class 

    Sub Main() 
     Dim user = "neo4j" 
     Dim pwd = "password" 
     Dim server = "localhost:7474" 
     Dim link = "http://{0}:{1}@{2}/db/data" 
     Dim url As New Uri(String.Format(link, user, pwd, server)) 

     Dim client As New GraphClient(url) 
     client.Connect() 

     Dim query = New CypherFluentQuery(client) _ 
       .Match("(p:Person {name: ""Tom Hanks""})-[:ACTED_IN]->(m:Movie)") _ 
       .Return(Function(p, m) New Together With { 
        .Person = p.As(Of Person)(), _ 
        .Movie = m.As(Of Movie)() 
       }) 

     Dim results = query.Results.ToList() 

     For Each item In results 

      Dim temp As String = String.Format("{0} - {1}<br>", item.Movie.title, item.Movie.released) 
      Console.WriteLine(temp) 

     Next 
     Console.ReadLine() 
    End Sub 

End Module 

隨着你的類定義,你已經擁有它們。

你可以試着在Neo4jClient的代碼庫中解決這個問題,併發出一個pull請求(這會很好),如果你確實需要這個,那麼暫時你可能想要獲得代碼並使用你自己的代碼編譯版本,而不是nuget作爲積極的發展似乎暫停一個小咒語。

PS。它的 vb特定的,C#對於匿名類型非常滿意,所以也許某些匿名類型是在VB中處理的,這在代碼庫中是無法識別的。

+0

Chris ...非常感謝!你的決議很棒! –