Dotnet Neo4JClient中能否用JsonProperty修改生成Cypher的变量别名?
解决方案
Neo4jClient 4.x版本的CypherFluentQuery生成RETURN别名时默认直接读取C#属性的原始名称,不会自动读取JsonProperty特性配置,可通过以下两种方式实现需求:
方案1:单查询显式指定别名
适合查询量少、别名规则不统一的场景,直接在返回字段后调用As()方法指定别名即可:
var query = new CypherFluentQuery(client) .Match("(foo:Foo)") .Return((foo) => new CustomFooQueryResult { Foos = foo.CollectAsDistinct<FooDto>().As("foos"), FooCount = (int)foo.CountDistinct().As("fooCount") });
修改后你的测试用例可直接通过,生成的Cypher别名与预期完全一致。
方案2:全局配置驼峰命名规则
适合大量查询需要统一使用小驼峰别名的场景,在初始化GraphClient时配置驼峰命名解析器即可:
// 引用Newtonsoft.Json.Serialization命名空间 var client = new GraphClient(new Uri("你的Neo4j地址"), "用户名", "密码"); client.JsonContractResolver = new CamelCasePropertyNamesContractResolver(); await client.ConnectAsync();
配置后所有自定义返回类型的属性会自动转换为小驼峰作为Cypher别名,同时反序列化阶段会自动匹配小驼峰字段到C#的帕斯卡命名属性,不需要单独添加JsonProperty特性即可满足你的链式子查询命名要求。
补充说明
你之前添加的JsonProperty特性仅作用于查询结果的反序列化阶段,不会影响Cypher语句的别名生成逻辑,因此之前的写法不会生效。
内容的提问来源于stack exchange,提问作者steven verwerft
相关产品推荐
相关产品推荐

