WCF数据服务-JSON响应有额外的;“结果”;部分

WCF数据服务-JSON响应有额外的;“结果”;部分,json,wcf-data-services,Json,Wcf Data Services,使用,或其他支持$format参数的方法,例如jsonpsuportinspectorAttribute我得到一些json响应,这对我来说有点奇怪 为什么我的json看起来像: { "d" : { "results": [ { "__metadata": { 当来自的json如下所示时: { "d" : [ { "__metadata": { 为什么我的有一个额外的“结果”小节 我的数据服务直接构建在我的实体框架模型上。我是否必须使用特定的上下文模板才能消除此问题?这是版本控制。在V2中,我

使用,或其他支持
$format
参数的方法,例如
jsonpsuportinspectorAttribute
我得到一些json响应,这对我来说有点奇怪

为什么我的json看起来像:

{
"d" : {
"results": [
{
"__metadata": {
当来自的json如下所示时:

{
"d" : [
{
"__metadata": {
为什么我的有一个额外的“结果”小节


我的数据服务直接构建在我的实体框架模型上。我是否必须使用特定的上下文模板才能消除此问题?

这是版本控制。在V2中,我们添加了服务器驱动的分页和内联计数功能,这些功能需要在提要上存储额外的元数据。但是由于V1中的提要只是一个JSON数组,因此没有地方放置这样的元数据

所以在V2中,响应中的所有提要都被包装在“结果”包装器中。也就是说,提要是一个JSON对象,它有一个名为“results”的属性,该属性包含数组。提要对象上可能有其他属性(下一个链接,计数,…)

有效负载的版本控制基于该有效负载中任何功能所需的最低版本。因此,如果您的服务使用的是需要高于V1版本的有效负载的内容,那么整个有效负载将使用该更高版本编写

您甚至可以在odata.org服务上看到这一点-尝试以下方法: ?$inlinecount=allpages&$format=json


响应将是V2,并将使用结果包装器。

有效负载确实带有版本信息。DataServiceVersion头就是为了这个目的。所以不需要猜测。上面的描述是关于服务器决定使用哪个版本来响应客户端请求,而不是关于读取现有负载。很抱歉,您是对的。有一个标题表示版本。我不知道我怎么会错过它,可能是代理服务器正在剥离它,我不知道。但是无论如何,谢谢。顺便说一句,我认为信息应该作为
内容类型的一部分来实现,例如:
内容类型:application/json;DataServiceVersion=2.0
。还有一个
分号位于版本号的末尾,版本号不是很高。