当前位置 : 主页 > 编程语言 > c语言 >

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

来源:互联网 收集:自由互联 发布时间:2021-06-25
我是Couchbase的新手,我遇到了一个让我困扰的行为.假设我已经在C#中定义了这个类: public class Thing{ public string Property1 { get; set; } public string Property2 { get; set; }} 我把它存放在一个名为Thi
我是Couchbase的新手,我遇到了一个让我困扰的行为.假设我已经在C#中定义了这个类:

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

我把它存放在一个名为ThingBucket的桶中的Couchbase中.现在,如果我进入Couchbase Query Workbench并输入:

SELECT Property1, Property2 FROM ThingBucket

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

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

这很好,因为我不需要做任何特殊的事情就可以将它反序列化为Thing. Couchbase C#驱动程序调用Json.NET进行反序列化,它只是起作用.

但是,如果我输入:

SELECT * FROM ThingBucket

我没有获得一系列的东西.我完全得到了别的东西:

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

现在,我有一个形状数组,而不是我的C#代码中存在的形状数组,而不是Thing数组.它是一个对象数组,其中每个对象都有一个Thing属性.为了让它反序列化为Thing,我必须使用[JsonProperty]属性覆盖Thing,这似乎是多余的,有点难看:

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

这是示例在CouchbaseNetClient的文档中的样子,所以看起来这种行为是预期的.

是否有一种优雅的方法使它返回原始形状而不列出SELECT语句中的每个属性?此外,我的新手眼睛没有看到这种行为有什么价值吗?

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

SELECT c FROM customer c得到你:

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

SELECT RAW c FROM customer c得到你:

[
  {
    "Property1": "Value",
    "Property2": "Value"
  }
]
网友评论