Microsoft.Azure.Graphs: как привести результат к типу? - PullRequest
0 голосов
/ 02 мая 2018

При следовании этому уроку на tutorial -velop-graph-dotnet все примеры Gremlin Query возвращают динамический результат.

как:

IDocumentQuery<dynamic> query = client.CreateGremlinQuery<dynamic>(graph, "g.V().hasLabel('person')");
dynamic result in await query.ExecuteNextAsync();

Результат примерно такой:

{"id":"thomas","label":"person","type":"vertex","properties":{"firstName":[{"id":"8fec3d0f-7290-4e80-9f38-9306de998579","value":"Thomas"}],"age":[{"id":"932879da-55c0-4dbc-b68c-fb3ef1e1827a","value":44}]}}

Но как использовать CreateGremlinQuery и ExecuteNextAsync, чтобы вернуть нормальный класс Person?

public class Person
{
    public string Id { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public int Age { get; set; }
}

1 Ответ

0 голосов
/ 04 июня 2018

Мое решение похоже на:

1] Аннотировать человека класс:

public class Person
{
    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("firstName")]
    public string FirstName { get; set; }

    [JsonProperty("lastName")]
    public string LastName { get; set; }

    [JsonProperty("age")]
    public int Age { get; set; }
}

2] Приведите результат к JObject и зациклите свойства:

IDocumentQuery<dynamic> query = client.CreateGremlinQuery<dynamic>(graph, "g.V().hasLabel('person')");
while (query.HasMoreResults)
{
    foreach (JObject item in await query.ExecuteNextAsync<dynamic>())
    {
        var properties = (JObject)item["properties"];

        var personAsJObject = new JObject();
        foreach (var property in properties)
        {
            if (property.Value is JArray valueArray)
            {
                personAsJObject.Add(property.Key, valueArray.First["value"]);
            }
        }

        var person = personAsJObject.ToObject<Person>(); // Real person here
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...