【发布时间】:2015-03-09 20:08:18
【问题描述】:
假设我有以下类要序列化并存储为 RavenDB 的文档:
public class Block
{
public string Id { get; set; }
public List<List<dynamic>> data { get; set; }
}
存储后,在数据库中可以看到这样的文档:
{
"Id": "f539770a",
"columns": [
[ 90, 91, 92, 93, 94 ],
[ "C", "D", "A", "B", "C" ]
] }
我想执行一个查询来检索“列”字段中的第 N 个值列表:
session.Query<Block>().Where(b => b.Id == "f539770a").Select(b =>b.columns[i]);
我得到以下错误:
{"无法将当前 JSON 对象(例如 {\"name\":\"value\"})反序列化为类型 'System.Collections.Generic.List`1[System.Object]',因为该类型需要JSON 数组(例如 [1,2,3])以正确反序列化。\r\n要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其可以从 JSON 对象反序列化的普通 .NET 类型(例如,不是像整数这样的原始类型,不是像数组或列表这样的集合类型)。也可以将 JsonObjectAttribute 添加到该类型以强制它从 JSON 对象反序列化.\r\n路径'__document_id'。"}
查询似乎正常工作(服务器返回 http 200),但存在客户端反序列化问题。
我错过了什么吗?
谢谢!!
更新:
我更改了数据结构,因为错误似乎表明:
public class Column
{
public List<dynamic> data { get; set; }
}
public class Block
{
public string Id { get; set; }
public List<Column> columns { get; set; }
}
存储的文档是这样的:
{
"Id": "f539770a",
"columns": [
{ "data": [ 95, 96, 97, 98, 99 ] },
{ "data": [ "D", "A", "B", "C", "D" ] }
]}
执行此查询后:
session.Query<Block>().Include<Block>(b => b.columns).Where(b => b.parentFileId == dbFileDescriptor.Id).Select(b => b.columns[i])
我没有异常,但是嵌套数组没有加载:
【问题讨论】:
-
你想用
Select(b => b.columns[i]);做什么? -
是的,有一个文档数组,我只想检索索引 i 处的文档。
-
查看我编辑的答案。