延後的內容 (JSON ADO.NET 資料服務架構)
從 ADO.NET 資料服務傳回之回應的資料有時候可能會非常龐大。為了節省頻寬或 CPU 循環,資料服務可能不會針對要求傳回完整的回應。ADO.NET 資料服務可能會延後傳送幾乎回應的所有區段。這表示,ADO.NET 資料服務很可能會延後導覽屬性或大型屬性值 (例如 BLOBS 或影像) 的序列化 (Serialization)。
下列範例將顯示 ADO.NET 資料服務如何表示使用 JSON 序列化的延後內容。當兩個實體類型存在時 (例如 Customer
和 Order
,其中單一客戶與許多訂單相關聯),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 資料服務的用戶端應用程式