Отложенное содержимое (формат JSON платформы служб данных ADO.NET)
Количество данных, возвращаемых в ответе от служб данных ADO.NET, иногда может быть очень большим. Для сохранения пропускной способности или циклов ЦП служба данных может возвращать неполный ответ на запрос. Службы данных ADO.NET могут отложить отправку почти любого раздела ответа; наиболее вероятно, что службы данных ADO.NET отложат сериализацию свойств навигации или больших по объему значений свойств, таких как большие двоичные объекты (BLOB) или изображения.
В следующем примере демонстрируется, каким образом службы данных 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
не возвращены. Чтобы извлечь эти значения, необходимо сделать запрос GET
непосредственно к Customers(\'NTSOS\')/Orders
.
Правила для отложенного содержимого в JSON
Следующие правила определяют использование отложенного содержимого в службах данных ADO.NET при использовании сериализации JSON:
Содержимое свойства, сопровождаемого командой
__deferred
, не возвращается в сериализации. Запрашивающий объект может извлечь это содержимое, направив запросGET
родительскому элементу. Запрашивающий объект также может включить в запрос параметр$expand
, чтобы избежать откладывания содержимого. Дополнительные сведения см. в разделе Системные параметры запросов служб данных ADO.NET.Свойство
__deferred
может быть свойством внешнего объекта только в том случае, если этот внешний объект не содержит никаких других свойств.Свойство
__deferred
не подразумевает, что имеется отложенное содержимое. Оно указывает, что потенциальное содержимое еще не вычислено или не сериализовано.По умолчанию службы данных ADO.NET откладывают сериализацию следующих видов данных.
Значения свойства навигации.
Значения ссылок.
Значения свойств, относящиеся к типу
Edm.Binary
.
Значения свойств, относящиеся к типу
EdmType.Binary
, нельзя отложить.
Примеры
В следующем примере демонстрируется сериализация JSON пустого набора сущностей Customers
:
{ "d": [ ] }
В следующем примере демонстрируется сериализация JSON набора сущностей Customers
, который содержит два экземпляра типа сущности с именем 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"
}
},
}
]
}
В следующем примере демонстрируется сериализация JSON типа сущности Customer
, который содержит все связанные 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"
}
}
]
}
}
В следующем примере демонстрируется сериализация JSON одного экземпляра типа сущности Customer
, имеющего пустую строку в качестве имени своей компании и NULL в качестве значения свойства адреса:
{ "d":
{
__metadata: {
uri: "Customers(NTSOS)", type: "NorthwindModel.Customer"
},
CustomerID: "NTSOS",
CompanyName: "Contoso Ltd",
Address: null,
Orders: {
__deferred: {
uri: "Customers(NTSOS)/Orders"
}
}
}
}
В следующем примере демонстрируется сериализация JSON свойства CustomerID
типа сущности Customer
, где типом свойства является строка, а значением свойства является NTSOS
:
"NTSOS"
Этот пример аналогичен предыдущему примеру для формата JSON, за исключением того, что запрошена сериализация для значения без дополнительных метаданных; окружающая разметка JSON отсутствует.
NTSOS
См. также
Понятия
Правила сериализации JSON (платформа служб данных ADO.NET)
Формат JSON (платформа служб данных ADO.NET)
Клиентские приложения служб данных ADO.NET
Другие ресурсы
ADO.NET Data Services Framework