延迟的内容(JSON ADO.NET 数据服务框架)
有时,在来自 ADO.NET 数据服务的响应中返回的数据量会非常大。为了节省带宽或 CPU 周期,数据服务可能不会返回针对请求的完整响应。ADO.NET 数据服务可能会延迟发送响应的几乎任何部分;ADO.NET 数据服务将很可能延迟导航属性或大属性值(如 BLOBS 或图像)的序列化。
下面的示例演示 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": [ ] }
下面的示例演示 Customers
实体集的 JSON 序列化,此实体集包含名为 Customer
的实体类型的两个实例。与 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"
}
},
}
]
}
下面的示例演示 Customer
实体类型的 JSON 序列化,此实体类型包含所有已内联序列化的相关 Orders
。
{ "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
实体类型实例的 JSON 序列化,此实例包含一个空字符串作为其公司名称,并且其地址属性为 null:
{ "d":
{
__metadata: {
uri: "Customers(NTSOS)", type: "NorthwindModel.Customer"
},
CustomerID: "NTSOS",
CompanyName: "Contoso Ltd",
Address: null,
Orders: {
__deferred: {
uri: "Customers(NTSOS)/Orders"
}
}
}
}
下一个示例演示 Customer
实体类型上的 CustomerID
属性的 JSON 序列化,其中,该属性的类型为字符串,值为 NTSOS
:
"NTSOS"
此示例与上一个 JSON 示例相同,只不过请求的序列化针对的是不带附加元数据的值;没有任何环绕 JSON 标记。
NTSOS
另请参见
概念
JSON 序列化规则(ADO.NET 数据服务框架)
JSON 格式(ADO.NET 数据服务框架)
ADO.NET 数据服务的客户端应用程序
其他资源
ADO.NET Data Services Framework