2

WCF Data Services OData サービスを使用するクライアント アプリケーションがあります (両方とも v5.3.0)。デフォルトの Atom Pub XML ではなく、JSON を使用してクライアント アプリケーションがサービスと通信するようにしたいと考えています。

これは、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;

Atom でできるように、IEdmModel を指定せずに JSON 形式を使用できるようにしたいと考えています。これは可能ですか?

4

1 に答える 1

0

サーバー モデルのクライアント側がなければ、WCF Data Services クライアントを使用して JSON Light ペイロードを読み取ることはできません。JSON Light ペイロードがクリーンで小さいのは、クライアントがサーバー モデルを理解していることを前提としており、それを使用して除外された余分なメタデータをすべて計算できるためです。

ただし、必ずしも EdmxReader を使用してサーバーの $metadata ドキュメントを自分で解析する必要はありません。Visual Studio の [サービス参照の追加] を使用してクライアント側クラスを生成し、(DataServiceContext を直接ではなく) 派生 DataServiceContext クラスを使用する場合、生成された派生クラスには、ctx.Format.UseJson()明示的にモデル。

于 2013-03-25T06:14:42.083 に答える