【问题标题】:parsing JSON object to a list of a model from couchbase view从 couchbase 视图将 JSON 对象解析为模型列表
【发布时间】:2017-03-27 18:16:56
【问题描述】:

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

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

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

因此,当我在 (var rows in result.Rows) 中进行迭代时,我想将内容(以 JSON 格式)中的每个值分配给具有 serialNumberuldNumberassignedDate在课堂上

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&lt;dynamic&gt;' to 'Newtonsoft.Json.JsonReader"

如果我这样做,row.Key.toString();,我会收到 'Newtonsoft.Json.Linq.JObject' 的异常错误

“无法将 couchbase.views.viewrow 转换为字符串”

我查看了thisthis,但都没有工作。

【问题讨论】:

    标签: c# .net couchbase couchbase-view


    【解决方案1】:

    当你执行这样的发出语句时:

    emit(doc.content, null);
    

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

    emit(doc.content, doc);
    

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

    此外,您通常不会将 JSON 对象映射放在键中。通常,它要么是像数字或字符串这样的单个值,要么是一个值数组。数组更容易用于视图查找。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-26
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      • 2020-03-06
      相关资源
      最近更新 更多