2

我有一个正在使用 WCF 数据服务 OData 服务的客户端应用程序(两者都是 v5.3.0)。我希望客户端应用程序使用 JSON 与服务进行通信,而不是使用默认的 Atom Pub XML。

如果不提供 IEdmModel 实例,这可能吗?使用 Atom 格式时可以这样做:

        var ctx = new DataServiceContext(_oDataSvcUri, DataServiceProtocolVersion.V3)
        {
            IgnoreMissingProperties = true
        };

        // this isn't explicitly needed, as it uses Atom by default
        ctx.Format.UseAtom();

        return ctx;

而要使用 JSON,这是需要的示例:

        var ctx = new DataServiceContext(_oDataSvcUri, DataServiceProtocolVersion.V3)
            {
                IgnoreMissingProperties = true
            };

        const string svcMetadata = "*insert contents of http://example.com/YourData.svc/$metadata here*";

        var xmlReader = XmlReader.Create(new StringReader(svcMetadata));

        IEdmModel edmModel = EdmxReader.Parse(xmlReader);

        ctx.Format.UseJson(edmModel);

        ctx.ResolveName = type => type.FullName;
        ctx.ResolveType = typeName => Type.GetType(typeName + ", " + "MyDomainModelAssemblyName");

        return ctx;

我希望能够在不指定 IEdmModel 的情况下使用 JSON 格式,就像使用 Atom 一样。这可能吗?

4

1 回答 1

0

如果没有服务器模型客户端,则无法使用 WCF 数据服务客户端读取 JSON Light 有效负载。JSON Light 有效负载干净且小巧,正是因为它们假定客户端了解服务器模型,并且可以计算使用该模型遗漏的所有额外元数据。

但是,您不一定必须自己使用 EdmxReader 来解析服务器的 $metadata 文档。如果您在 Visual Studio 中使用“添加服务引用”生成客户端类,并且使用派生的 DataServiceContext 类(而不是直接使用 DataServiceContext),则生成的派生类已经设置了一些配置,让您ctx.Format.UseJson()无需显式提供模型。

于 2013-03-25T06:14:42.083 回答