我是Couchbase的新手,我遇到了一个让我困扰的行为.假设我已经在C#中定义了这个类: public class Thing{ public string Property1 { get; set; } public string Property2 { get; set; }} 我把它存放在一个名为Thi
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" } ]