为什么我不能在C#中使用JsonConvert将Neo4jClient的查询结果(类型字符串)解析为Dictionary <string,string =“”>

时间:2018-01-22 21:12:40

标签: c# json neo4j neo4jclient

我正在尝试使用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无法反序列化空括号?如果是这样,还有其他方法可以解析这个庞大的结构吗?

1 个答案:

答案 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