从 couchbase 视图将 JSON 对象解析为模型列表

parsing JSON object to a list of a model from couchbase view

我正在尝试像 so 一样在 couchbase 中创建一个 mapreduce 视图。现在我在 couchbase 服务器中的视图代码如下所示,

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

我在哪里发出文档的内容。

所以当我在 (var rows in result.Rows) 中迭代时,我想将内容(在 JSON 中)中的每个值分配给具有 get/set 的模型(abc)列表serialNumberuldNumberassignedDate 在 class

row.key 值有

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

我的class看起来像

 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'

的异常错误

"cannot convert couchbase.views.viewrow to string "

我看过this and this,但是这两个都没用。

当你执行这样的 emit 语句时:

emit(doc.content, null);

您只是将视图键设置为 doc.content,并将行数据保留为空。你可以试试这个:

emit(doc.content, doc);

这将使行内容成为文档中的完整数据。或者,您可以使用 row.Id 获取文档 ID 并使用 Read(row.Id) 读取文档。这速度较慢,但​​视图使用的存储空间较少 space。

此外,您通常不会将 JSON 对象映射放入键中。通常,它要么是单个值(如数字或字符串),要么是值数组。数组更易于用于视图查找。