Couchbase Server 4.0 ОС: Windows 7 Client SDK: CouchbaseNetClient.2.2.5 Visual Studio 2013, C # 4.5

var query_res1 = m_bucket.Query<MyClass>("select * from MyData limit 10");
var query_res2 = m_bucket.Query<dynamic>("select * from MyData limit 10");

Query_res1 дает мне список типизированных данных, но объекты пусты (элементы по умолчанию (T)) (так что они созданы с новым, но не десериализованы)

Query_res2 работает «правильно»: список динамических объектов содержит мои данные из корзины.

Класс данных:

[Serializable]
public class MyClass
{
    [JsonProperty("dateTime")]
    public DateTime DateTime { get; set; }

    [JsonProperty("value")]
    public double Value { get; set; }

}

Спасибо за любую идею.

0
user2249481 25 Фев 2016 в 18:57

2 ответа

Лучший ответ

Измените запрос на:

"select MyData.* from MyData limit 10"

Причина в том, что SDK ожидает, что результаты запроса будут возвращены в виде массива значений документа, но то, что он получает от службы запросов n1ql, представляет собой массив значений документа, заключенных в другой объект как свойство под именем корзины. Выбор MyData. * Удаляет лишнюю оболочку объекта и напрямую возвращает значения документа.

1
David Ostrovsky 25 Фев 2016 в 20:03

Query_res1 дает мне список типизированных данных, но объекты пусты (элементы по умолчанию (T)) (так что они созданы с новым, но не десериализованы)

У вас две ситуации

1. ==> Я думаю, что объект пуст, потому что это поле, которое вы создали в своем «MyClass», не совпадает с данными из запроса, например

DateTime # дневное время Значение # значение

Должны ли данные из запроса и свойств совпадать?

  1. Я думаю, вам не следует создавать имя поля так же, как и dataType

    [JsonProperty ("dateTime")] общедоступные DateTime DateTime {получить; задавать; }

0
Binh LE 25 Фев 2016 в 16:05