加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:28:28 所属栏目:百科 来源:网络整理
导读:我是Couchbase的新手,我遇到了一个让我困扰的行为.假设我已经在C#中定义了这个类: public class Thing{ public string Property1 { get; set; } public string Property2 { get; set; }} 我把它存放在一个名为ThingBucket的桶中的Couchbase中.现在,如果我进
我是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"
  }
]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读