我正在尝试使用JsonConvert解析Neo4jClient的路径查询结果(字符串类型)。
我能够使用此方法解析节点的查询结果:
var _gClient = new GraphClient(new Uri("http://localhost:7474/db/data"));
_gClient.Connect();
var result = _gClient.Cypher
.Match("(n)")
.Return(n => n.As<string>())
.Results.ToList();
result.ForEach(n =>
{
var dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(n);
Console.WriteLine("Keys: " + String.Join(",", dict.Keys));
Console.WriteLine("Values: " + String.Join(",", dict.Values));
});
但是,当我尝试对路径的查询结果做同样的事情时,JsonConvert的DeserializeObject方法不能做同样的事情:
var _gClient = new GraphClient(new Uri("http://localhost:7474/db/data"));
_gClient.Connect();
var result = _gClient.Cypher
.Match("p=(a)-[:ACTED_IN]->(m:Movie {title:'The Matrix'})")
.Return(p => new
{
Nodes = Return.As<IEnumerable<string>>("EXTRACT(p in nodes(p) | p)"),
Relationships = Return.As<IEnumerable<string>>("EXTRACT(p in relationships(p) | p)")
})
.Results.ToList();
foreach (var n in result)
{
foreach (var s in n.Nodes)
{
JsonConvert.DeserializeObject<Dictionary<string, string>>(s);
}
}
错误是解析值时遇到的意外字符:{。路径&#39;扩展&#39;,第2行,第17位。
这是要解析的字符串的一部分:
{
"extensions": {},
"metadata": {
"id": 8,
"labels": [
"Person"
]
},
这是否意味着Json无法反序列化空括号?如果是这样,还有其他方法可以解析这个庞大的结构吗?
答案 0 :(得分:0)
问题在于您尝试反序列化为Dictionary<string,string>
,但您的JSON 不是 Dictionary<string,string>
关于意外{
的错误1}}是因为它是Dictionary<string,string>
JSON看起来像:
{
"Key1" : "Value1",
"Key2" : "Value2"
}
{
和extensions
上的metadata
意味着object
存在string
,而不只是JsonConvert.DeserializeObject<Dictionary<string, object>>(s)
。为此,您可以使用以下内容对其进行反序列化:
JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(s)
但是如果你想访问这些属性,你可以这样做:
FileSaver.js