我正在使用DataServiceContext消费odata服务,并希望以json格式返回数据。
我看起来像这样: Odata Query with DataServiceContext and get result as json
如果我尝试在发送请求事件中添加任何请求标头。我无法在小提琴手中看到那个标题。虽然事件是我已确认的射击。
我遇到了“context.Format.usejson”并尝试搜索它,但没有发现任何我能理解的内容。有人可以帮帮我吗? Using ODataLib to call a WCF Data Services service operation and JSON
我的目标是使用DataServiceContext来使用OData服务并获得JSON格式的结果。
答案 0 :(得分:10)
注意:只有在服务的最大协议版本为3或更高版本时,这些步骤才有效。 OData版本3引入了新的JSON格式,WCF数据服务客户端仅支持此JSON格式。 (旧的JSON有效负载顶部有"__metadata"
和"d":{...}
。在新的JSON格式中,您会看到"odata.metadata"
,"odata.type"
等内容。 / p>
首先,确保您拥有WCF Data Sevrices客户端库的5.1或更高版本(Visual Studio附带旧版本)以及在Visual Studio中使“添加服务引用”工作的工具的更新版本。
您可以在此处下载最新的工具安装程序:http://www.microsoft.com/en-us/download/details.aspx?id=35840。
安装完成后,我建议通过在NuGet包管理器控制台中发出以下命令来升级到最新版本的WCF Data Services客户端:
Install-Package Microsoft.Data.Services.Client
一旦升级到最新的客户端库,您应该能够在客户端中使用JSON而不会出现问题。在Visual Studio中右键单击您的项目,选择“添加服务引用”并输入服务的元数据文档的URL。在v5.1及更高版本中,这将拉下服务的完整模型,这是支持JSON所必需的。
“添加服务引用”将自动生成DataServiceContext
的子类。 (您可以通过在Visual Studio的解决方案资源管理器中选择“显示所有文件”并展开服务引用后面的代码来查看此生成的代码。)例如,当我对http://services.odata.org/V3/OData/OData.svc/$metadata
执行“添加服务引用”时,客户端库生成一个名为DemoService
的类。直接使用该派生类而不是DataServiceContext
,您只需调用.Format.UseJson()
即可。例如:
var context = new DemoService(new Uri("http://services.odata.org/V3/OData/OData.svc");
context.Format.UseJson();
答案 1 :(得分:3)
如果在OnContextCreated部分方法中加载服务模型,则可以在不提供参数的情况下调用context.Format.UseJson方法,如下面的代码所示:
public partial class DemoService
{
partial void OnContextCreated()
{
this.Format.LoadServiceModel = GeneratedEdmModel.GetInstance;
}
}