2012-04-25 78 views
1

使用WCF Data Services Toolkit或其他方式来支持$format参数,如JSONPSupportInspectorAttribute我收到了一些json响应,这对我来说有点奇怪。WCF数据服务 - JSON响应有额外的“结果”部分

为什么我的JSON的样子:

{ 
"d" : { 
"results": [ 
{ 
"__metadata": { 

当从OData.org $format的JSON如下:

{ 
"d" : [ 
{ 
"__metadata": { 

为什么我的有一个额外的 “效果” 分节?

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

回答

2

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

因此,在V2​​中,所有在响应中的提要都封装在“结果”包装中。那就是feed是一个JSON对象,它有一个叫做“results”的属性,它有数组。 Feed对象上可能还有其他属性(下一个链接,计数,...)。

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

你可以看到这甚至在odata.org服务 - 试试这个: http://services.odata.org/OData/OData.svc/Products $ inlinecount =所有页& $格式= JSON

的响应将是V2,并将使用效果的包装?

+0

负载确实带有版本信息。 DataServiceVersion头是为此目的。所以没有必要猜测。上面的描述是关于服务器决定使用哪个版本来响应客户端请求,而不是读取现有的有效负载。 – 2012-06-28 11:40:36

+0

我很抱歉你说得对。有一个标题表示版本。我不知道我是如何错过它的,可能是代理服务器正在剥离它,我不知道。但无论如何,谢谢。 – Aliostad 2012-06-28 11:59:41

+0

顺便说一下,恕我直言,这个信息应该已经实现了,例如:Content-Type:application/json; DataServiceVersion = 2.0'。在版本号中也有一个';'分号,这个分号并不好。 – Aliostad 2012-06-28 12:08:33