c# - Couchbase N1QL 结果根据 SELECT 语法改变形状

标签 c# couchbase n1ql

我是 Couchbase 的新手,我遇到了一个真正困扰我的行为。假设我在 C# 中定义了这个类:

public class Thing
{
    public string Property1 { get; set; }
    public string Property2 { get; set; }
}

我将其存储在 Couchbase 中名为 ThingBucket 的存储桶中。现在,如果我进入 Couchbase 查询工作台并输入:

SELECT Property1, Property2 FROM ThingBucket

我得到的是一个 JSON 对象,它将直接反序列化为一个 Thing 数组:

[
    {
        "Property1": "Value",
        "Property2": "Value"
    }
]

这很好,因为我不需要做任何特别的事情就可以将它反序列化为一个事物。 Couchbase C# 驱动程序调用 Json.NET 进行反序列化,它正常工作。

但是,如果我输入:

SELECT * FROM ThingBucket

我没有得到 Thing 数组。我得到了完全不同的东西:

[
    {
      "ThingBucket": {
          "Property1": "Value",
          "Property2": "Value"
      }
    }
]

现在,我有一个 C# 代码中根本不存在的形状数组,而不是一个 Thing 数组。它是一个对象数组,其中每个对象都有一个属性,即事物。为了让它反序列化为 Thing,我必须用 [JsonProperty] 属性覆盖 Thing,这看起来多余且有点丑陋:

public class Thing
{
    [JsonProperty("Property1")]
    public string Property1 { get; set; }
    [JsonProperty("Property2")]
    public string Property2 { get; set; }
}

这就是 CouchbaseNetClient 文档中示例的样子,所以看起来这种行为是意料之中的。

有没有一种优雅的方法可以让它返回原始形状而不用列出 SELECT 语句中的每个属性?另外,这种行为是否有一些我的新手没有看到的值(value)?

最佳答案

RAW 关键字可能就是您要查找的内容。

SELECT c FROM customer c 得到这个:

[
  {
    "c": {
      "Property1": "Value",
      "Property2": "Value"
    }
  }
]

SELECT RAW c FROM customer c 得到这个:

[
  {
    "Property1": "Value",
    "Property2": "Value"
  }
]

关于c# - Couchbase N1QL 结果根据 SELECT 语法改变形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54320981/

相关文章:

android - 在 couchbase-lite android 中排序和查询文档

database - 在 couchbase 中减去日期?

java - Couchbase Java SDK : N1QL queries that include document id

javascript - 当新的 couchbase Node 添加到集群时,是否需要更改应用程序?

asp.net-mvc - 未找到 View 'Index' 或其主视图,或者没有 View 引擎支持搜索的位置

c# - 如何在控制台应用程序中配置 ConsoleLogger?

c# - 意外编辑文件时禁用 Visual Studio 2010 中的自动 checkout

c# - 为什么不强制对泛型类型进行类约束?

c# - 哪种类型的可抛出错误适用于这种情况?