синтаксический анализ объекта JSON в список моделей из просмотра кушетки

Я пытаюсь создать представление mapreduce в Couchbase, например так. Прямо сейчас мой код просмотра на веб-сервере Couchbase выглядит так:

function(doc, meta)
{
  emit(doc.content,null);
}

где я испускаю содержимое документа.

поэтому, когда я повторяюсь в (var rows in result.Rows), я хочу присвоить каждое значение в содержимом (в JSON) списку модели (abc), которая имеет get/set для serialNumber, uldNumber и assignedDate в классе

Значение row.key имеет

{{
  "serialNumber": "1",
  "uldNumber": "33",
  "assignedDate": "2033-02-17T09:10:38"
}}

мой класс выглядит так

 public class abc
    {
        //[JsonProperty("serialNumber")]
        public string SerialNumber { get; set; }

        //[JsonProperty("uldNumber")]
        public string UldNumber { get; set; }

        //[JsonProperty("assignedDate")]
        public DateTime AssignedDate { get; set; }
    }

Если я попытаюсь десериализовать его так,

 JsonSerializer js = new JsonSerializer();                       
 _abcList.Add(js.Deserialize<dynamic[]>(row));

я получаю "cannot convert from 'Couchbase.Views.ViewRow<dynamic>' to 'Newtonsoft.Json.JsonReader"

Если бы я сделал это, row.Key.toString();, я бы получил ошибку исключения 'Newtonsoft.Json.Linq.JObject'

"не удается преобразовать Couchbase.views.viewrow в строку"

Я просмотрел это и это, но оба они не сработали.


person Iamasking88    schedule 27.03.2017    source источник


Ответы (1)


Когда вы делаете оператор emit следующим образом:

emit(doc.content, null);

Вы просто делаете ключ представления doc.content и оставляете данные строки нулевыми. Вы можете попробовать это:

emit(doc.content, doc);

Это сделает содержимое строки полными данными в документе. В качестве альтернативы вы можете использовать row.Id для получения идентификатора документа и использовать Read(row.Id) для чтения документа. Это медленнее, но использует меньше места для хранения представления.

Кроме того, вы обычно не добавляете карты объектов JSON в ключ. Обычно это либо одно значение, такое как число или строка, либо массив значений. Массивы проще использовать для просмотра представлений.

person Brant Burnett    schedule 31.03.2017