共用方式為


延後的內容 (JSON ADO.NET 資料服務架構)

從 ADO.NET 資料服務傳回之回應的資料有時候可能會非常龐大。為了節省頻寬或 CPU 循環,資料服務可能不會針對要求傳回完整的回應。ADO.NET 資料服務可能會延後傳送幾乎回應的所有區段。這表示,ADO.NET 資料服務很可能會延後導覽屬性或大型屬性值 (例如 BLOBS 或影像) 的序列化 (Serialization)。

下列範例將顯示 ADO.NET 資料服務如何表示使用 JSON 序列化的延後內容。當兩個實體類型存在時 (例如 CustomerOrder,其中單一客戶與許多訂單相關聯),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 資料服務中延後內容的使用方式:

  • __deferred 命令所附註之屬性的內容不會在序列化中傳回。要求者可以針對父項目執行 GET 要求,藉以擷取這些內容。要求者也可以加入 $expand 查詢選項來避免延後。如需詳細資訊,請參閱 ADO.NET 資料服務系統查詢選項

  • 除非最外層物件沒有包含其他屬性,否則 __deferred 屬性不得成為最外層物件的屬性。

  • __deferred 屬性並非表示存在延後的內容。它表示尚未評估或序列化可能的內容。

  • 根據預設,ADO.NET 資料服務會延後序列化下列資料種類:

    • 導覽屬性值。

    • 連結値。

    • 屬於 Edm.Binary 型別的屬性值。

  • 屬於 EdmType.Binary 型別的屬性值無法延後。

範例

下一則範例將示範空白 Customers 實體集的 JSON 序列化:

{ "d": [ ] }

下列範例將示範包含兩個名為 Customer 之實體類型執行個體 (Instance) 的 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"
                                }
                 }
                 ]
}
}

下列範例將示範單一 Customer 實體類型執行個體 (具有空白字串當做公司名稱而且其 Address 屬性為 null) 的 JSON 序列化:

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

下一則範例將示範 Customer 實體類型 (屬性型別為字串而且值為 NTSOS) 之 CustomerID 屬性的 JSON 序列化:

"NTSOS"

這則範例與上一則 JSON 範例相同,但是要求的序列化是針對沒有其他中繼資料的值進行。前後沒有 JSON 標記。

NTSOS

另請參閱

概念

JSON 序列化規則 (ADO.NET 資料服務架構)
JSON 格式 (ADO.NET 資料服務架構)
ADO.NET 資料服務的用戶端應用程式

其他資源

ADO.NET Data Services Framework