6

我正在使用 DataServiceContext 使用 odata 服务,并希望以 json 格式返回数据。

我看起来像这样: Odata Query with DataServiceContext and get result as json

如果我尝试在发送请求事件中添加任何请求标头。我在提琴手中看不到那个标题。虽然事件正在触发,但我已经确认。

我遇到了“context.Format.usejson”并尝试搜索它,但没有找到任何我能理解的东西。有人可以帮我吗? 使用 ODataLib 调用 WCF 数据服务服务操作和 JSON

我的目标是使用 OData 服务并使用 DataServiceContext 以 JSON 格式获取结果。

4

2 回答 2

11

注意:仅当您的服务的最大协议版本为 3 或更高时,这些步骤才有效。OData 版本 3 引入了一种新的 JSON 格式,而 WCF 数据服务客户端仅支持这种 JSON 格式。(旧的 JSON 有效负载"__metadata"在顶部有类似的东西"d":{...}。在新的 JSON 格式中,你会看到类似的东西"odata.metadata""odata.type"等)

首先,确保您拥有 5.1 或更高版本的 WCF Data Sevrices 客户端库(Visual Studio 附带旧版本)以及使 Visual Studio 中的“添加服务引用”工作的工具的更新版本。

您可以在此处下载最新的工具安装程序:http: //www.microsoft.com/en-us/download/details.aspx?id=35840

安装后,我建议通过在 NuGet 包管理器控制台中发出以下命令来升级到最新版本的 WCF 数据服务客户端:

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();
于 2013-06-12T08:23:40.487 回答
3

如果您在 OnContextCreated 部分方法中加载服务模型,则可以在不提供参数的情况下调用 context.Format.UseJson 方法,如下面的代码所示:

public partial class DemoService
{
    partial void OnContextCreated()
    {
        this.Format.LoadServiceModel = GeneratedEdmModel.GetInstance;
    }
}
于 2013-09-04T20:33:17.227 回答