[英]How to return the whole node with all its properties from Neo4J .NET client?
我正在嘗試制作一個通用代碼,可以對連接到用戶的對象進行過濾。 這些對象可以是不同的類型,具有不同的屬性等。
基本上我想實現此方法:
public string GetRelatedObjects(string sourceObject, string userId){
var resQuery = GraphDB.Cypher
.Match("(src:" + sourceObject + ")--(usr:User { Id:{userId} })")
.WithParam("userId", userId)
.Return(src => src.As<object>());
var result = await resQuery.ResultsAsync;
return JsonConvert.SerializeObject(result);
}
問題是當我使用.As<object>()
我得到一個空項目。
當我輸入一個具體類型時,例如.As<User>()
我得到的結果是我期望的。 是否有辦法獲得Neo4JClient想要得到的東西,還是我必須以某種方式降低水平?
因此,Neo4jClient在后台使用Json.NET將來自Neo4j的輸出反序列化為您指定的類。 當您指定不具有屬性的object
,您將不會獲得任何屬性。 Neo4jClient和Json.NET都不知道您真正想要的是什么,因此您只能取回該object
。 現在,解決時間-您可以使用dynamic
。
public async Task<string> GetRelatedObjectsAsJson(string sourceObject, string userId)
{
var resQuery = GraphDB.Cypher
.Match(string.Format("(src:{0})--(usr:User {{ Id:{{userId}} }})", sourceObject))
.WithParam("userId", userId)
.Return(src => src.As<Node<string>>());
var result = await resQuery.ResultsAsync;
var output = result.Select(node => JsonConvert.DeserializeObject<dynamic>(node.Data)).ToList();
return JsonConvert.SerializeObject(output);
}
我想這會得到您想要的,如果我是您,我可能會返回Task<IEnumerable<dynamic>>
而不是將其重新string
化為string
,但是我不知道您想要將結果用於什么,所以也許不適當。
請參閱鑄造未知類型的節點以獲取更多信息。
您可以通過創建廣義節點類來返回具有其所有屬性的節點。
准確地說,可以通過
C#類別:
public class GenNode
{
public long Id { get; set; }
public IEnumerable<String> Labels { get; set; }
public Dictionary<String, String> Properties { get; set; }
}
改寫方法:
public IEnumerable<GenNode> GetRelatedObjects(string sourceObject, string userId){
var resQuery = GraphDB.Cypher
.Match("(src:" + sourceObject + ")--(usr:User { Id:{userId} })")
.WithParam("userId", userId)
.With("src, properties(src) as prop")
.Return((src,prop) => new GenNode
{
Id = src.Id(),
Labels = src.Labels(),
Properties = prop.As<Dictionary<Object,Object>>()
});
var result = await resQuery.ResultsAsync;
return result;
}
注意返回類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.