Я столкнулся с проблемой при сопоставлении набора результатов Gremlin с классом на С#. Я пытаюсь получить вершины вместе со свойствами. Вот код:
public IList<T> All<T>() where T : class, new()
{
Type type = typeof(T);
string query = "g.V().hasLabel('" + type.Name.ToString().ToLower() + "').valueMap(true)";
var resultSet = _gremlinClient.SubmitAsync<dynamic>(query).Result;
List<T> list = JsonConvert.DeserializeObject<List<T>>(JsonConvert.SerializeObject(resultSet));
return list;
}
А вот сущность пользователя, которую я передаю этому универсальному методу.
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
Когда я запускаю код, он выдает ошибку при десериализации.
'При синтаксическом анализе значения обнаружен неожиданный символ: [. Путь '[0].FirstName', строка 1, позиция 37.'
Когда я проверил его, я обнаружил, что строка JSON имеет значения свойств с квадратными скобками, например:
[
{
"id": 0,
"label": "user",
"FirstName": [ "Azhar" ],
"LastName": [ "Rahi" ]
},
{
"id": 3,
"label": "user",
"FirstName": [ "John" ],
"LastName": [ "Doe" ]
}
]
Вы можете видеть, что некоторые свойства имеют квадратные скобки, такие как "FirstName":["Azhar"]
. Я проверил его без квадратных скобок, и он работает нормально. Итак, причина ошибки в том, что строки представлены в виде массивов в JSON.
В приведенной выше строке JSON id
и label
являются автоматически сгенерированными Gremlin.Net свойствами. Остальные на самом деле являются User
свойствами объекта. Я не знаю, почему Gremlin добавляет скобки при добавлении свойств к Vertex
и есть ли возможность этого избежать.
Пожалуйста, предложите любое решение, либо в Gremlin.Net, либо каким-либо образом изменив сопоставление JSON с классом.
resultSet
- person Mohammed Sajid   schedule 28.06.2020resultSet
у вас есть массив имени и фамилии, и вы сериализуете и десериализуете, чтобы избежать этого результата. Если да, вы можете использовать JsonConverter. - person Mohammed Sajid   schedule 28.06.2020SimplePropertyArrayToSingleConverter
из этого ответа. - person dbc   schedule 29.06.2020