从 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)列表serialNumber
、uldNumber
和 assignedDate
在 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 对象映射放入键中。通常,它要么是单个值(如数字或字符串),要么是值数组。数组更易于用于视图查找。
我正在尝试像 so 一样在 couchbase 中创建一个 mapreduce 视图。现在我在 couchbase 服务器中的视图代码如下所示,
function(doc, meta)
{
emit(doc.content,null);
}
我在哪里发出文档的内容。
所以当我在 (var rows in result.Rows)
中迭代时,我想将内容(在 JSON 中)中的每个值分配给具有 get/set 的模型(abc)列表serialNumber
、uldNumber
和 assignedDate
在 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 对象映射放入键中。通常,它要么是单个值(如数字或字符串),要么是值数组。数组更易于用于视图查找。