次の方法で共有


遅延コンテンツ (JSON ADO.NET Data Services フレームワーク)

ADO.NET Data Services からの応答では、大量のデータが返される場合があります。帯域幅や CPU の処理能力を節約するために、要求に対して完全な応答をデータ サービスが返さない場合があります。ADO.NET Data Services では、任意の部分の応答の送信を遅らせることができます。具体的には、ADO.NET Data Services は、ナビゲーション プロパティのシリアル化や、BLOB または画像などの大きなプロパティ値のシリアル化を遅らせることができます。

次の例は、ADO.NET Data Services で JSON シリアル化を使用してコンテンツの遅延を指定する方法を示しています。たとえば、Customer および Order など、1 人の顧客に多数の注文が関連付けられているエンティティ型が 2 つある場合、Customer エンティティの既定のシリアル化は次のようになります。

{ "d":
 { 
    __metadata: {
        uri: "Customers(\'NTSOS\')", type: "NorthwindModel.Customers"
    }, CustomerID: "NTSOS", CompanyName: "Contoso Ltd",
        Address: "1010 Street", Orders: {
        __deferred: {
            uri: "Customers(\'NTSOS\')/Orders" 
        }
    }
 }
}

この例の __deferred プロパティは、Order 要素の値を取得しないことを示します。値を取得するには、Customers(\'NTSOS\')/Orders に対して GET 要求を直接行う必要があります。

JSON における遅延コンテンツ規則

JSON シリアル化を使用した場合に ADO.NET Data Services で遅延コンテンツを使用する際、次の規則が適用されます。

  • シリアル化を行った場合、__deferred コマンドが注釈を付けるプロパティのコンテンツは返されません。要求元は、親要素に対して GET 要求を実行することによって、コンテンツを取得できます。要求元は、$expand クエリ オプションを含めることにより、遅延を行わないようにすることもできます。詳細については、「ADO.NET Data Services のシステム クエリ オプション」を参照してください。

  • __deferred プロパティは、一番外側のオブジェクトのプロパティにしないでください。ただし、この一番外側のオブジェクトにこのプロパティ以外のプロパティが含まれていない場合は、この限りではありません。

  • __deferred プロパティは、遅延されるコンテンツが存在することを意味するのではなく、潜在的なコンテンツがまだ評価またはシリアル化されていないことを示します。

  • ADO.NET Data Services では既定で、次の種類のデータのシリアル化が遅延します。

    • ナビゲーション プロパティ値

    • リンク値

    • Edm.Binary 型のプロパティ値

  • EdmType.Binary 型のプロパティ値を遅延させることはできません。

次は、空の Customers エンティティ セットの JSON シリアル化を示す例です。

{ "d": [ ] }

次の例では、Customer エンティティ型の 2 つのインスタンスを格納する Customers エンティティ セットの JSON シリアル化を示します。Customers に関連付けられた注文はインラインで展開されません。これは既定の動作です。

{ "d": [ 
    {
        __metadata: {
           uri: "Customers(\'NTSOS\')", type: "NorthwindModel.Customer"
        }, 
        CustomerID: "NTSOS", 
        CompanyName: "Contoso Ltd", 
        Address: "1010 Street",
        Orders: {
            __deferred: {
                uri: "Customers(NTSOS)/Orders"
            }
        }        
    },    
    {
        __metadata: {
            uri: "Customers(FABRK)", type: "NorthwindModel.Customer"
        }, 
        CustomerID: "FABRK", 
        CompanyName: "Fabrikam Inc", 
        "2020 Street",
        Orders: {
            __deferred: {
                uri: "Customers(\'FABRK\')/Orders"
            }
        },
    }
  ]
}

次の例では、インラインでシリアル化されたすべての関連 Orders を格納する Customer エンティティ型の JSON シリアル化を示します。

{ "d": 
{
        __metadata: {
            uri: "Customers(NTSOS)", type: "NorthwindModel.Customer"
        }, 
        CustomerID: "NTSOS", 
        CompanyName: "Contoso Ltd", 
        Address: "1010 Street",
     Orders: [ 
                {
                    __metadata: {
                           uri: "Customers(NTSOS)/Orders", 
                           type: "NorthwindModel.Order" 
                        },
                    ShippedDate: "\/Date(1202321)\/",
                    ShipAddress: "1010 Street",
                    Customers: {
                                  __deferred: {
                                  Uri: "Customers(\'NTSOS\')/Orders/Customers"
                                }
                 }
                 ]
}
}

次の例では、会社名として空の文字列を持ち、住所プロパティが null である、1 つの Customer エンティティ型インスタンスの JSON シリアル化を示します。

{ "d": 
{
        __metadata: {
            uri: "Customers(NTSOS)", type: "NorthwindModel.Customer"
        }, 
        CustomerID: "NTSOS", 
        CompanyName: "Contoso Ltd", 
        Address: null,
        Orders: {
            __deferred: {
                uri: "Customers(NTSOS)/Orders"
            }
        }
}
}

次の例では、プロパティの型が文字列であり、その値が NTSOS である、Customer エンティティ型の CustomerID プロパティの JSON シリアル化を示します。

"NTSOS"

次の例は、上記の JSON の例と同じです。ただし、シリアル化の要求が追加メタデータのない値に対するものである (周囲の JSON マークアップがない) 点が違います。

NTSOS

参照

概念

JSON シリアル化ルール (ADO.NET Data Services フレームワーク)
JSON 形式 (ADO.NET Data Services フレームワーク)
ADO.NET Data Services のクライアント アプリケーション

その他のリソース

ADO.NET Data Services Framework