Я новичок в Couchbase, и я столкнулся с поведением, которое действительно беспокоит меня.Допустим, я определил этот класс в C #:
public class Thing
{
public string Property1 { get; set; }
public string Property2 { get; set; }
}
Я храню его в Couchbase в контейнере под названием ThingBucket.Теперь, если я войду в Couchbase Query Workbench и введу:
SELECT Property1, Property2 FROM ThingBucket
Я получу обратно объект JSON, который будет десериализован непосредственно в массив Thing:
[
{
"Property1": "Value",
"Property2": "Value"
}
]
Это хорошо, потому что мне не нужно делать ничего особенного, чтобы заставить его десериализоваться в вещь.Драйвер Couchbase C # вызывает Json.NET для десериализации, и он просто работает.
Однако, если я введу:
SELECT * FROM ThingBucket
, я не получу массив Thing.Я получаю нечто совершенно другое:
[
{
"ThingBucket": {
"Property1": "Value",
"Property2": "Value"
}
}
]
Теперь вместо массива Thing у меня есть массив фигур, которых вообще нет в моем коде C #.Это массив объектов, где каждый объект имеет свойство Thing.Чтобы заставить его десериализоваться в Thing, мне нужно покрыть Thing атрибутами [JsonProperty], которые кажутся избыточными и некрасивыми:
public class Thing
{
[JsonProperty("Property1")]
public string Property1 { get; set; }
[JsonProperty("Property2")]
public string Property2 { get; set; }
}
Вот как выглядят примеры в документации для CouchbaseNetClient, поэтому кажется, что это ожидаемое поведение.
Есть ли элегантный способ заставить его вернуть исходную форму, не перечисляя каждое свойство в операторе SELECT?Кроме того, есть ли какая-то ценность в этом поведении, которое не видят мои глаза новичка?