Dotnet Neo4jClient: Могу ли я использовать JsonProperty для изменения псевдонимов переменных в сгенерированном шифре?

#c# #.net #cypher #neo4jclient

Вопрос:

У меня есть этот запрос cypherfluent, который возвращает пользовательский объект CustomFooQueryResult , а не анонимный тип:

 var query = new CypherFluentQuery(client)  .Match("(foo:Foo)")  .Return((foo) =gt; new CustomFooQueryResult  {  Foos = foo.CollectAsDistinctlt;FooDtogt;(),  FooCount = (int)foo.CountDistinct()  });  
 private class CustomFooQueryResult  {  [JsonProperty("foos")]  public IEnumerablelt;FooDtogt; Foos { get; set; }  [JsonProperty("fooCount")]  public int FooCount { get; set; }  }   private class FooDto  {  public string FooProp { get; set; }  }  

После проверки сгенерированного запроса на шифр я обнаружил, что имена свойств класса используются в качестве псевдонимов переменных в сгенерированном операторе возврата.

Мне интересно, возможно ли или должно быть возможно повлиять на генерацию псевдонимов. Я бы хотел, чтобы они были camelcase, в то время как свойства моего класса остаются pascalcase. Я попытался использовать [JsonProperty("fooCount")] , но все равно «FooCount» был сгенерирован как псевдоним.

Хотя это кажется незначительным неудобством, я связываю многие из этих запросов в виде подзапросов в вызовах, где я хотел бы иметь входные и выходные параметры в camelcase.

Вот что я попробовал: (используя .net5, Neo4jClient 4.1.18)

 [Test]  public void TestCustomReturnTypeWithJsonPropertyAttr()  {  // arrange  var expectedCypher = "MATCH (foo:Foo)rnRETURN collect(distinct foo) AS foos, count(distinct foo) AS fooCount";   var client = Substitute.Forlt;IRawGraphClientgt;();  var query = new CypherFluentQuery(client)  .Match("(foo:Foo)")  .Return((foo) =gt; new CustomFooQueryResult  {  Foos = foo.CollectAsDistinctlt;FooDtogt;(),  FooCount = (int)foo.CountDistinct()  });   // act  var resultCypher = query.Query.DebugQueryText; // results in: "MATCH (foo:Foo)rnRETURN collect(distinct foo) AS Foos, count(distinct foo) AS FooCount"   // assert  Assert.AreEqual(expectedCypher, resultCypher);  }